<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ricardo Viana&#039;s blog &#187; programação</title>
	<atom:link href="http://ricardo.zn.inf.br/tag/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://ricardo.zn.inf.br</link>
	<description>tecnologia, games, programação, web e o que mais vier à cabeça</description>
	<lastBuildDate>Thu, 26 Jan 2012 17:37:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Configura&#231;&#227;o do Ambiente de Desenvolvimento Android</title>
		<link>http://ricardo.zn.inf.br/2012/01/26/configurao-do-ambiente-de-desenvolvimento-android/</link>
		<comments>http://ricardo.zn.inf.br/2012/01/26/configurao-do-ambiente-de-desenvolvimento-android/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 17:37:48 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://ricardo.zn.inf.br/?p=892</guid>
		<description><![CDATA[Para começar a programar com android é preciso primeiro instalar e configurar o ambiente de programação adequado. De forma geral precisamos de dois requisitos: o SDK e a IDE. A seguir serão detalhadas a instalação de cada um. Android SDK Para que o Android SDK execute normalmente precisamos ter instalado a JDK (não apenas a [...]]]></description>
			<content:encoded><![CDATA[<p align="left">Para começar a programar com android é preciso primeiro instalar e configurar o ambiente de programação adequado. De forma geral precisamos de dois requisitos: o SDK e a IDE. A seguir serão detalhadas a instalação de cada um.</p>
<h1>Android SDK</h1>
<p align="left">Para que o Android SDK execute normalmente precisamos ter instalado a JDK (não apenas a JRE) a partir da versão 5, então verifiquem isso antes de partimos para o SDK propriamente dito. A JDK pode ser baixada aqui:</p>
<p align="center"><a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html">http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html</a></p>
<p>Escolha a versão correta para seu sistema operacional e mande brasa. Depois disso podemos baixar a SDK do android e executá-la em nossa máquina. A última versão pode ser baixada aqui:</p>
<p align="center"><a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a></p>
<p align="left">Para Windows existe uma versão instalável (.exe), mas vamos nos concentrar nas outras que seguirão exatamente os mesmos passos em todas as plataformas. Após baixar basta descompactar em alguma pasta.</p>
<p align="left"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image.png" rel="lightbox[892]"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb.png" width="287" height="202" /></a></p>
<p>Ao descompactar o SDK temos a estrutura de arquivos da figura, sendo que cada um tem a seguinte função:</p>
<ul>
<li>add-ons: pacotes externos do Android (vazia no momento pois ainda não instalamos nada) </li>
<li>plataforms: plataformas específicas para cada versão do Android (vazia no momento pois ainda não instalamos nenhuma plataforma) </li>
<li>tools: ferramentas para desenvolvimento e emulador do Android (para facilitar podemos adicioná-la ao PATH do sistema) </li>
<li>AVD Manager.exe: gerenciador de AVD (Android Virtual Device), máquinas virtuais (emuladores) que usaremos para testar as aplicações </li>
</ul>
<p><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image1.png" rel="lightbox[892]"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb1.png" width="244" height="175" /></a></p>
<ul>
<li>SDK Manager.exe: usado para configuração do SDK, instalação de plataformas e bibliotecas e ferramentas (já que vem vazio devemos instalar alguma plataforma para começar) </li>
</ul>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image2.png" rel="lightbox[892]"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb2.png" width="244" height="175" /></a></p>
<h1>Instalação de uma Plataforma Android</h1>
<p>De forma simples, através do SDK Manager, podemos instalar a plataforma Android que quisermos selecionando a versão correspondente e clicando em Install Packages. no caso da figura acima, estamos instalando a versão 4.0.3 juntamente com documentação, exemplos e a google API correspondente. Na figura abaixo, vejam que selecionei também a versão 2.2 para instalar, por questões de compatibilidade e por essa versão ainda ser muito difundida.</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image3.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb3.png" width="244" height="175" /></a></p>
<p>Após isso, basta aceitar os termos e o SDK Manager irá baixar e instalar as plataformas escolhidas. Por se tratar de um número grande de arquivos esse processo deve ser um pouco demorado.</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image4.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb4.png" width="244" height="124" /></a></p>
<h1 align="left">Instalação do Eclipse com ADT</h1>
<p>A ferramenta padrão para desenvolvimento android escolhida pela google é o bom e velho eclipse unido a um plugin especialmente desenvolvido para isso, o ADT (Android Development Tools). Para instalá-lo, admitindo que já temos um eclipse funcionando normalmente em nossa máquina, basta acessarmos o menu Help &gt; Install new software…</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image5.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb5.png" width="244" height="200" /></a></p>
<p>Na janela que se abre devemos clicar no botão Add.. e inserir a URL de onde será baixado o ADT: <a href="https://dl-ssl.google.com/android/eclipse/">https://dl-ssl.google.com/android/eclipse/</a></p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image6.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb6.png" width="244" height="96" /></a></p>
<p>Logo após serão carregados os programas disponíveis nesta URL, então selecionamos todos e mandamos instalar, clicando em next.</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image7.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb7.png" width="244" height="200" /></a></p>
<p align="left">Novamente clicamos em next</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image8.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb8.png" width="244" height="173" /></a></p>
<p align="left">Aceitamos os termos da licença e, por fim, clicamos em finish. Assim, o ADT será instalado em nosso eclipse.</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image9.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb9.png" width="244" height="173" /></a></p>
<p align="left">Depois de tudo baixado o eclipse pedirá paa ser reiniciado e, quando voltar, o plugin deverá estar instalado corretamente. Para que possamos começar a usá-lo, antes precisamos configurar o ADT para que ele “enxergue” o SDK. Para isso vamos ao menu Windows &gt; Preferences e selecionamos Android no lado esquerdo da janela que abriu. Para configurarmos basta selecionarmos, através do botão Browse, a pasta em que descompactamos o SDK.</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image10.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb10.png" width="244" height="207" /></a></p>
<p align="left">Dessa forma o ADT estará configurado e estamos bem perto de poder começar a programar para android, bastando, para isso, criarmos nosso primeiro dispositivo virtual (AVD) para que possamos rodar nossas aplicações no emulador.</p>
<h1>Criação de uma AVD</h1>
<p>Preferi deixar a criação da AVD para o final para podermos fazer isso diretamente de dentro do eclipse, via plugin ADT (mas também poderiamos fazer pelo aplicativo AVD Manager, citado mais acima). Usando o botão do eclipse destacado na figura chamamos o AVD Manager.</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image11.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb11.png" width="244" height="132" /></a></p>
<p>O AVD Manager será aberto:</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image12.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb12.png" width="244" height="175" /></a></p>
<p>Para criarmos um AVD devemos clicar no botão New</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image13.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb13.png" width="157" height="244" /></a></p>
<p>Nessa janela devemos dar um nome para nosso AVD e selecionarmos a plataforma alvo em Target. Pronto, as outras opções serão preenchidas por padrão, mas podemos modificá-la a nosso gosto, por exemplo reservando um espaço para simular um cartão SD no emulador ou mudar a resolução da tela do mesmo. Vejam como ficou configurado meu AVD:</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image14.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb14.png" width="156" height="244" /></a></p>
<p>Voltando a tela do AVD Manager podemos testar nosso AVD selecionando-o e clicando em Start, assim o emulador será aberto:</p>
<p align="center"><a href="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image15.png" rel="lightbox[892]"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://ricardo.zn.inf.br/wp-content/uploads/2012/01/image_thumb15.png" width="244" height="228" /></a></p>
<p>Assim finalizamos a configuração de nosso ambiente e já podemos partir para a criação de nosso primeiro projeto: um HelloWorld.</p>
]]></content:encoded>
			<wfw:commentRss>http://ricardo.zn.inf.br/2012/01/26/configurao-do-ambiente-de-desenvolvimento-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Algoritmos de Percorrimento em grafos</title>
		<link>http://ricardo.zn.inf.br/2010/11/24/algoritmos-de-percorrimento-em-grafos/</link>
		<comments>http://ricardo.zn.inf.br/2010/11/24/algoritmos-de-percorrimento-em-grafos/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 20:03:59 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[estruturas de dados 2010.2]]></category>
		<category><![CDATA[picos]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[ufpi]]></category>
		<category><![CDATA[2010.2]]></category>
		<category><![CDATA[estruturas de dados]]></category>

		<guid isPermaLink="false">http://ricardo.zn.inf.br/?p=767</guid>
		<description><![CDATA[Pessoal, seguem os algoritmos que implementei de busca em largura e busca em profundidade. Vamos dar uma olhada: #include &#60;iostream&#62; #define TAMANHO 5 using namespace std; // Tipos para o grafo typedef int no; typedef struct t_grafo { bool vertice[TAMANHO]; no arestas[TAMANHO][TAMANHO]; } grafo; // Tipos para a fila typedef struct t_no_fila { no no_grafo; [...]]]></description>
			<content:encoded><![CDATA[<p>Pessoal, seguem os algoritmos que implementei de busca em largura e busca em profundidade. Vamos dar uma olhada:</p>
<pre  class="brush:cpp">
#include &lt;iostream&gt;

#define TAMANHO 5

using namespace std;

// Tipos para o grafo
typedef int no;

typedef struct t_grafo {
	bool vertice[TAMANHO];
	no arestas[TAMANHO][TAMANHO];
} grafo;

// Tipos para a fila
typedef struct t_no_fila {
	no no_grafo;
	struct t_no_fila* proximo;
} no_fila;

typedef struct t_fila {
	no_fila* inicio;
	no_fila* final;
} fila;

// Funções de manipulação da fila
fila inicializar() {
	fila f;
	f.inicio = NULL;
	f.final = NULL;
	return f;
}

void enfileire(no v, fila&#038; f) {
	no_fila* n = new no_fila;
	n->no_grafo = v;
	n->proximo = NULL;
	if (f.final != NULL) {
		f.final->proximo = n;
	}
	f.final = n;
	if (f.inicio == NULL) {
		f.inicio = n;
	}
	n = NULL;
}

void desenfileire(fila&#038; f) {
	if (f.inicio == NULL) {
		cout << "Erro! Fila vazia." << endl;
	} else {
		no_fila* t = f.inicio;
		f.inicio = f.inicio->proximo;
		t->proximo = NULL;
		delete t;
		if (f.inicio == NULL) {
			f.final = NULL;
		}
	}

}

bool fila_vazia(fila f) {
	return f.inicio == NULL;
}

no frente(fila f) {
	return f.inicio->no_grafo;
}

// Funções de manipulação do grafo
void visite(no v) {
	cout << " -> " << v;
}

void marque(no v, grafo&#038; g) {
	g.vertice[v] = true;
}

bool marcado(no v, grafo g) {
	return g.vertice[v];
}

// Percorrimento em amplitude
void amplitude(no v, grafo g) {
	no t, w;
	fila f = inicializar();
	visite(v);
	marque(v, g);
	enfileire(v, f);
	while (not fila_vazia(f)) {
		t = frente(f);
		desenfileire(f);
		for (w = 0; w < TAMANHO; w++) {
			if (g.arestas[w][t] == 1 &#038;&#038; not marcado(w, g)) {
				visite(w);
				marque(w, g);
				enfileire(w, f);
			}
		}
	}
}

// Percorrimento em profundidade
void profundidade(no v, grafo&#038; g) {
	no w;
	visite(v);
	marque(v, g);
	for (w = 0; w < TAMANHO; w++) {
		if (g.arestas[w][v] == 1 &#038;&#038; not marcado(w, g)) {
			profundidade(w, g);
		}
	}
}

int main() {
	grafo gr = { {false, false, false, false, false },
		{
			{0, 1, 1, 0, 0},
			{1, 0, 0, 1, 1},
			{1, 0, 0, 0, 0},
			{0, 1, 0, 0, 1},
			{0, 1, 0, 1, 0}
		}
	};

	cout << "Percorrimento em amplitude";
	amplitude(0, gr);
	cout << endl;
	cout << "Percorrimento em profundidade";
	profundidade(0, gr);
	cout << endl;
	return 0;
}
</pre>
<p>Vejam que os algoritmos são exatamente iguais ao pseudocódigo do livro. Usamos apenas os assuntos anteriores, como fila, para criar as estruturas auxiliares.</p>
<p>Na função main, só o que precisamos fazer é construir o grafo segundo nossa estrutura (nesse caso de matriz de incidência) e, em seguida, chamar as funções de percorrimento. A saída do algoritmo é a sequência de nós que o procedimentos percorrem no processo.</p>
<p>A seguir temos a mesma implementação usando listas de adjacência. Como podem notar, a diferença maior é na estrutura usada para representar o grafo e no método main a construção do grafo que, por sinal, é o mesmo usado no código acima e que representa o grafo da página 160.</p>
<pre  class="brush:cpp">
#include &lt;iostream&gt;

#define TAMANHO 5

using namespace std;

// Tipos para o grafo
typedef int no;

typedef struct t_no_lista {
	int no;
	struct t_no_lista* proximo;
} no_lista;

typedef struct t_grafo {
	bool vertice[TAMANHO];
	no_lista* arestas[TAMANHO];
} grafo;

// Tipos para a fila
typedef struct t_no_fila {
	no no_grafo;
	struct t_no_fila* proximo;
} no_fila;

typedef struct t_fila {
	no_fila* inicio;
	no_fila* final;
} fila;

// Inserção de nós adjacentes na estrutura do grafo
// Passa-se a aresta (nós origem e destino)
void insere_aresta_grafo(no origem, no destino, grafo&#038; g) {
	no_lista* n1 = new no_lista;
	n1->no = destino;
	n1->proximo = g.arestas[origem];
	g.arestas[origem] = n1;
	n1 = NULL;

	no_lista* n2 = new no_lista;
	n2->no = origem;
	n2->proximo = g.arestas[destino];
	g.arestas[destino] = n2;
	n2 = NULL;
}

// Funções de manipulação da fila
fila inicializar() {
	fila f;
	f.inicio = NULL;
	f.final = NULL;
	return f;
}

void enfileire(no v, fila&#038; f) {
	no_fila* n = new no_fila;
	n->no_grafo = v;
	n->proximo = NULL;
	if (f.final != NULL) {
		f.final->proximo = n;
	}
	f.final = n;
	if (f.inicio == NULL) {
		f.inicio = n;
	}
	n = NULL;
}

void desenfileire(fila&#038; f) {
	if (f.inicio == NULL) {
		cout << "Erro! Fila vazia." << endl;
	} else {
		no_fila* t = f.inicio;
		f.inicio = f.inicio->proximo;
		t->proximo = NULL;
		delete t;
		if (f.inicio == NULL) {
			f.final = NULL;
		}
	}

}

bool fila_vazia(fila f) {
	return f.inicio == NULL;
}

no frente(fila f) {
	return f.inicio->no_grafo;
}

// Funções de manipulação do grafo
void visite(no v) {
	cout << " -> " << v;
}

void marque(no v, grafo&#038; g) {
	g.vertice[v] = true;
}

bool marcado(no v, grafo g) {
	return g.vertice[v];
}

// Percorrimento em amplitude
void amplitude(no v, grafo g) {
	no t;
	fila f = inicializar();
	visite(v);
	marque(v, g);
	enfileire(v, f);
	while (not fila_vazia(f)) {
		t = frente(f);
		desenfileire(f);
		no_lista* w = g.arestas[t];
		while (w != NULL) {
			if (not marcado(w->no, g)) {
				visite(w->no);
				marque(w->no, g);
				enfileire(w->no, f);
			}
			w = w->proximo;
		}
	}
}

// Percorrimento em profundidade
void profundidade(no v, grafo&#038; g) {
	visite(v);
	marque(v, g);
	no_lista* w = g.arestas[v];
	while (w != NULL) {
		if (not marcado(w->no, g)) {
			profundidade(w->no, g);
		}
		w = w->proximo;
	}
}

int main() {
	grafo gr;
	for (int i = 0; i < TAMANHO; i++) {
		gr.vertice[i] = false;
		gr.arestas[i] = NULL;
	}
	insere_aresta_grafo(3, 4, gr);
	insere_aresta_grafo(1, 4, gr);
	insere_aresta_grafo(1, 3, gr);
	insere_aresta_grafo(0, 2, gr);
	insere_aresta_grafo(0, 1, gr);

	cout << "Percorrimento em amplitude";
	amplitude(0, gr);
	cout << endl;
	cout << "Percorrimento em profundidade";
	profundidade(0, gr);
	cout << endl;
	return 0;
}
</pre>
<p>Então, é isso, espero que entendam os algoritmos. Não há dificuldade, bastava apenas traduzir os pseudocódigos para a linguagem de programação preferida de cada um...</p>
<p>[]'s<br />
Ricardo Viana</p>
]]></content:encoded>
			<wfw:commentRss>http://ricardo.zn.inf.br/2010/11/24/algoritmos-de-percorrimento-em-grafos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Materiais de C++</title>
		<link>http://ricardo.zn.inf.br/2010/08/20/materiais-de-c/</link>
		<comments>http://ricardo.zn.inf.br/2010/08/20/materiais-de-c/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 21:46:09 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[algoritmos e programação I 2010.2]]></category>
		<category><![CDATA[algoritmos e programação II 2010.2]]></category>
		<category><![CDATA[estruturas de dados 2010.2]]></category>
		<category><![CDATA[picos]]></category>
		<category><![CDATA[projeto e análise de algoritmos 2010.2]]></category>
		<category><![CDATA[ufpi]]></category>
		<category><![CDATA[2010.2]]></category>
		<category><![CDATA[algoritmos e programação I]]></category>
		<category><![CDATA[algoritmos e programação II]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[estruturas de dados]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[projeto e análise de algoritmos]]></category>

		<guid isPermaLink="false">http://ricardo.zn.inf.br/?p=691</guid>
		<description><![CDATA[Seguem alguns links com materiais sobre C++ pessoal. Para quem está nas disciplinas de programação e também para as outras disciplinas que devem usar essa linguagem em seus trabalhos: http://ultradownloads.uol.com.br/download/C-Como-Uma-Linguagem-De-Programacao-Orientada-A-Objetos/ http://www.inf.pucrs.br/~pinho/PRGSWB/OO/oocpp.html http://www.dca.fee.unicamp.br/cursos/POOCPP/ http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html http://www.sbvb.com.br/cpp/livro_cpp.pdf http://orion.lcg.ufrj.br/C++/curso/ C++ Tutorial (Em inglês &#8211; resumido e muito bom) http://www.inf.pucrs.br/~celso/Curso%20de%20C.htm http://www.tiexpert.net/programacao/c/index.php Aproveitem []&#8216;s Ricardo Viana]]></description>
			<content:encoded><![CDATA[<p>Seguem alguns links com materiais sobre C++ pessoal. Para quem está nas disciplinas de programação e também para as outras disciplinas que devem usar essa linguagem em seus trabalhos:</p>
<p><a href="http://ultradownloads.uol.com.br/download/C-Como-Uma-Linguagem-De-Programacao-Orientada-A-Objetos/">http://ultradownloads.uol.com.br/download/C-Como-Uma-Linguagem-De-Programacao-Orientada-A-Objetos/</a></p>
<p><a href="http://www.inf.pucrs.br/~pinho/PRGSWB/OO/oocpp.html">http://www.inf.pucrs.br/~pinho/PRGSWB/OO/oocpp.html</a></p>
<p><a href="http://www.dca.fee.unicamp.br/cursos/POOCPP/">http://www.dca.fee.unicamp.br/cursos/POOCPP/</a></p>
<p><a href="http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html">http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html</a></p>
<p><a href="http://www.sbvb.com.br/cpp/livro_cpp.pdf">http://www.sbvb.com.br/cpp/livro_cpp.pdf</a></p>
<p><a href="http://orion.lcg.ufrj.br/C++/curso/">http://orion.lcg.ufrj.br/C++/curso/</a></p>
<p><strong><a href='http://ricardo.zn.inf.br/wp-content/uploads/2010/08/tutorial.pdf'>C++ Tutorial (Em inglês &#8211; resumido e muito bom)</a></p>
<p><a href="http://www.inf.pucrs.br/~celso/Curso%20de%20C.htm">http://www.inf.pucrs.br/~celso/Curso%20de%20C.htm</a></p>
<p><a href="http://www.tiexpert.net/programacao/c/index.php">http://www.tiexpert.net/programacao/c/index.php</a><br />
</strong></p>
<p>Aproveitem</p>
<p>[]&#8216;s<br />
Ricardo Viana</p>
]]></content:encoded>
			<wfw:commentRss>http://ricardo.zn.inf.br/2010/08/20/materiais-de-c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Alterar engine de tabelas no MySQL</title>
		<link>http://ricardo.zn.inf.br/2009/04/15/alterar-engine-de-tabelas-no-mysql/</link>
		<comments>http://ricardo.zn.inf.br/2009/04/15/alterar-engine-de-tabelas-no-mysql/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 04:26:31 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://zezim.dbro.com.br/?p=309</guid>
		<description><![CDATA[Dúvida que geralmente volta à tona sempre que precisamos executar essa operação. É bastante simples, basta rodar o comando: ALTER  TABLE sua_tabela ENGINE = InnoDB Muda-se a engine da tabela para InnoDB, por exemplo. Para fazer isso em outros bancos o comando é bastante parecido. []&#8216;s zezim]]></description>
			<content:encoded><![CDATA[<p>Dúvida que geralmente volta à tona sempre que precisamos executar essa operação. É bastante simples, basta rodar o comando:</p>
<pre lang="mySQL" line="1">ALTER  TABLE sua_tabela ENGINE = InnoDB</pre>
<p>Muda-se a engine da tabela para InnoDB, por exemplo.</p>
<p>Para fazer isso em outros bancos o comando é bastante parecido.</p>
<p>[]&#8216;s<br />
zezim</p>
]]></content:encoded>
			<wfw:commentRss>http://ricardo.zn.inf.br/2009/04/15/alterar-engine-de-tabelas-no-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alterando as cores do msys</title>
		<link>http://ricardo.zn.inf.br/2008/09/16/alterando-as-cores-do-msys/</link>
		<comments>http://ricardo.zn.inf.br/2008/09/16/alterando-as-cores-do-msys/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 12:50:54 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[personalização]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://zezim.brogui.com/?p=184</guid>
		<description><![CDATA[Se você é como eu e programa em C/C++ no windows com o mingw e pra compilar usa o msys e já cansou daquela tela amarelada dele, é bem simples fazer a alteração. Basta abrir o arquivo msys.bat, presente na pasta de instalação do msys e procurar pelas linhas 55 e 56: if &#8220;x%MINGW32BGCOLOR%&#8221; == [...]]]></description>
			<content:encoded><![CDATA[<p>Se você é como eu e programa em C/C++ no windows com o mingw e pra compilar usa o msys e já cansou daquela tela amarelada dele, é bem simples fazer a alteração.</p>
<p><a href="http://ricardo.zn.inf.br/wp-content/uploads/2008/09/msys-orig.jpg" rel="lightbox[173]"><img class="alignnone size-full wp-image-185" title="msys-orig" src="http://ricardo.zn.inf.br/wp-content/uploads/2008/09/msys-orig.jpg" alt="" width="500" height="272" /></a></p>
<p>Basta abrir o arquivo msys.bat, presente na pasta de instalação do msys e procurar pelas linhas 55 e 56:</p>
<p>if &#8220;x%MINGW32BGCOLOR%&#8221; == &#8220;x&#8221; set MINGW32BGCOLOR=LightYellow<br />
if &#8220;x%MINGW32FGCOLOR%&#8221; == &#8220;x&#8221; set MINGW32FGCOLOR=Navy</p>
<p>Aí ficou fácil né. Basta alterar o LightYellow para mudar a cor de fundo e o Navy para mudar a cor da fonte. No meu aqui coloquei Black e White e ficou bem melhor do que o original. Vejam o resultado:</p>
<p><a href="http://ricardo.zn.inf.br/wp-content/uploads/2008/09/msys-preto.jpg" rel="lightbox[173]"><img class="alignnone size-full wp-image-186" title="msys-preto" src="http://ricardo.zn.inf.br/wp-content/uploads/2008/09/msys-preto.jpg" alt="" width="500" height="272" /></a></p>
<p>Espero ter ajudado.</p>
<p>[]&#8216;s<br />
zezim</p>
]]></content:encoded>
			<wfw:commentRss>http://ricardo.zn.inf.br/2008/09/16/alterando-as-cores-do-msys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feliz dia do programador</title>
		<link>http://ricardo.zn.inf.br/2008/09/12/feliz-dia-do-programador/</link>
		<comments>http://ricardo.zn.inf.br/2008/09/12/feliz-dia-do-programador/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 13:13:29 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[comemoração]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://zezim.brogui.com/?p=170</guid>
		<description><![CDATA[Comemorado no 256º (2^8) dia no ano, que cai justamente hoje, por 2008 ser bissexto, e nos anos normais cai em 13 de setembro. Em todo o mundo os programadores comemoram se comportando de forma boba, escrevendo programinhas bobocas, mexendo em computadores antigos, jogando joguinhos de computador, editando a wikipedia, etc. Claro, contanto que nos [...]]]></description>
			<content:encoded><![CDATA[<p>Comemorado no 256º (2^8) dia no ano, que cai justamente hoje, por 2008 ser bissexto, e nos anos normais cai em 13 de setembro. Em todo o mundo os programadores comemoram se comportando de forma boba, escrevendo programinhas bobocas, mexendo em computadores antigos, jogando joguinhos de computador, editando a wikipedia, etc. Claro, contanto que nos outros dias do ano tenham trabalhando direitinho, feito códigos bons e se dedicado, porque pra quem já faz isso todos os dias do ano essa data não faz sentido hehehe&#8230;.</p>
<p><a href="http://ricardo.zn.inf.br/wp-content/uploads/2008/09/programmerday.jpeg" rel="lightbox[160]"><img class="alignnone size-full wp-image-169" title="programmerday" src="http://ricardo.zn.inf.br/wp-content/uploads/2008/09/programmerday.jpeg" alt="" width="146" height="49" /></a></p>
<p>[]&#8216;s<br />
zezim</p>
]]></content:encoded>
			<wfw:commentRss>http://ricardo.zn.inf.br/2008/09/12/feliz-dia-do-programador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abraçe um programador</title>
		<link>http://ricardo.zn.inf.br/2008/09/01/abrace-um-programador/</link>
		<comments>http://ricardo.zn.inf.br/2008/09/01/abrace-um-programador/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 20:51:55 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[saúde]]></category>

		<guid isPermaLink="false">http://zezim.brogui.com/?p=106</guid>
		<description><![CDATA[Veja um pouco da dura vida dos programadores vi aqui: http://www.tiagodoria.ig.com.br/2008/09/01/abrace-um-programador/ []&#8216;s zezim]]></description>
			<content:encoded><![CDATA[<p>Veja um pouco da dura vida dos programadores</p>
<p><embed src="http://blip.tv/play/gYwjwZJqjdEh" type="application/x-shockwave-flash" width="500" height="320" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>vi aqui: <a href="http://www.tiagodoria.ig.com.br/2008/09/01/abrace-um-programador/" target="_blank">http://www.tiagodoria.ig.com.br/2008/09/01/abrace-um-programador/</a></p>
<p>[]&#8216;s<br />
zezim</p>
]]></content:encoded>
			<wfw:commentRss>http://ricardo.zn.inf.br/2008/09/01/abrace-um-programador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

