ATIVIDADES PRTICAS
SUPERVISIONADAS
Estrutura de Dados
Prof.:
2 Bimestre / 2014
Taubat
02 de Dezembro de 2014
ETAPA 4.
1
Aula-tema: Grafos.
Passo 2 (Equipe).
Fazer a discusso da leitura do captulo do livro texto e do
material de aula, que ser utilizado como base para a
implementao de rotas de voos por meio da estrutura
grafo, com destaque para:
1. Representao de Grafos em C.
Os vrtices de um grafo sero representados por nmeros
inteiros no intervalo 0..v-1. O conjunto de vrtices ser,
portanto, 0 1 2 3...v-1.Vrtices so representados por
objetos do tipo Vertex.
#define Vertex int
Os arcos dos grafos sero representados por structs do tipo
Edge. Um objeto do tipo Edge representa um arco com
ponta inicial v e ponta final w.
typedef struct{
Vertex v;
Vertex w;
} Edge;
Se e um arco ento e.v a ponta inicial e e.w a ponta
final do arco. A construo de arcos ficar a cargo de uma
funo EDGE. A funo EDGE recebe dois vrtices v e w
e devolve um arco com ponta inicial v e ponta final w.
2
4. Caminhamento em Amplitude.
Em uma busca em largura a partir de um vrtice v,
esperamos que todos os vizinhos de v sejam visitados
antes de continuar a busca mais profundamente.
Contrariamente busca em profundidade, o algoritmo de
busca em largura no recursivo.
O algoritmo de busca em largura semelhante ao
algoritmo de busca em profundidade. A principal diferena
que usamos um fila F ao invs de uma pilha:
procedimento Busca-Largura(v: vrtice)
Inicializar F
Marcar v como visitado
Colocar v no final de F
Enquanto F no vazio:
u := primeiro elemento de F
Retirar u de F
Para cada vrtice w adjacente a u:
Se w no foi visitado:
Marcar w como visitado
Colocar w no final de F
Neste caso preciso um programa para lanar a busca:
procedimento Busca(G: Grafo)
Para cada vrtice v de G:
Marcar v como no visitado
Para cada vrtice v de G:
Se v no foi visitado:
{Busca-Largura ou Busca-Prof-iter}(v)
5
5. Caminhamento em Profundidade.
Seja um grafo G = (V,E) que contm n vrtices. Seja
tambem uma representao que indica, para cada vrtice,
se ele foi visitado ou no. Eis uma verso recursiva do
algoritmo de busca em profundidade que visita todos os
vrtices:
procedimento Busca(G: Grafo)
Para Cada vrtice v de G:
Marque v como no visitado
Para Cada vrtice v de G:
Se v no foi visitado:
Busca-Prof(v)
procedimento Busca-Prof(v: vrtice)
Marque v como visitado
Para Cada vrtice w adjacente a v:
Se w no foi visitado:
Busca-Prof(w)
Note que esse algoritmo funciona com um grafo
desconexo. Se j sabemos que o grafo conexo, podemos
chamar diretamente a funo Busca-Prof, escolhendo
arbitrariamento um vrtice inicial.
Passo 3 (Equipe).
#include<stdlib.h>
#include<stdio.h>
6
#include<conio.h>
void menu();
void selecao();
void montargrafo();
void caminhagrafo();
int main()
{
menu();
return 0;
system("pause");
}
void menu()
{
system("title Empresa VOEBEM");
printf("\t Empresa VOEBEM \n");
printf(" ____________________________\n");
printf(" | Escolha uma opcao abaixo |\n");
printf(" |--------------------------|\n");
printf(" | 1 - Cadastrar cidades
printf(" | 2 - Melhor rota
printf(" | 0 - Sair
|\n");
|\n");
|\n");
printf(" |__________________________|\n");
selecao();
}
void selecao()
{
int opcao;
break;
}
}
}
}
printf(" ____________________________\n");
printf(" | Escolha uma opcao abaixo |\n");
printf(" |--------------------------|\n");
printf(" | 1 - Cadastrar cidades
|\n");
|\n");
printf(" |__________________________|\n");
printf("\n Opcao: ");
scanf("%d",&num);
}
while(num!=0);
system("cls");
}
//FUNO CAMINHO GRAFO (MELHOR CAMINHO)
void caminhagrafo()
{
int
aux,num,I,J,T,F,R,vet_resposta[10],menor,vet_caminho[10
],vet_peso[10],LUGAR_INICIAL,LUGAR_FINAL,NO_
ATUAL,N1,N2;
char cidade[10][10];
char A[10][10];
char B[10][10];
do
{
//PREENCHE OS VETORES CAMINHO E PESO
10
if(vet_peso[J]>-1)
{
vet_peso[J]= A[I][J];
vet_peso[J]= B[I][J];
NO_ATUAL=I;
}
}
}
}
}
}
//verificando se o menor valor do vetor peso diferente de
-1 e a mesma posio no vetor caminho igual a F
menor= vet_peso[0];
for (T=0; T<10; T++)
{
if(vet_peso[T]< menor)
{
menor = vet_peso[T];
}
if(vet_peso[T]!=1)
{
if(vet_caminho[T]==F)
{
NO_ATUAL=I;
vet_resposta[I]=NO_ATUAL;
}
if(NO_ATUAL==LUGAR_FINAL)
{
12
|\n");
|\n");
printf(" |__________________________|\n");
printf("\n Opcao: ");
scanf("%d",&num);
}
while(num!=0);
system("cls");
}
13
Passo 4 (Equipe).
Relatrio 4 Grafos.
14
Fonte de pesquisas.
https://docs.google.com/open?
id=0B_uLQd5hdqlWdU9tQi1yS1pTQXUzNEQ1d3BsbkZ
BUQ
Captulo 8: Grafos e Suas Aplicaes do livro texto
da disciplina de Estrutura de Dados (TENEMBAUM,
A.; LANGSAM, Y.; AUGESTEIN, M. Estrutura de
Dados usando C. 1 ed. So Paulo: Pearson, 2005. p.
408 a 425)
http://erinaldosn.files.wordpress.com/2011/02/aula-2representac3a7c3a3o.pdf
http://www.professeurs.polymtl.ca/michel.gagnon/Discipli
nas/Bac/Grafos/CaminhoMin/caminho_min.html
http://www.professeurs.polymtl.ca/michel.gagnon/Discipli
nas/Bac/Grafos/Busca/busca.html
15