CES11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Prticas
- Slides: 15
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas - 2020 Capítulo V Grafos
n Este laboratório corresponde ao Exame de CES-11/2020 n Objetivos deste laboratório: 1. Ler de um arquivo os dados de um digrafo e armazenalos numa estrutura de listas de adjacências - Na realidade, os dados são o número de vértices do digrafo e os adjacentes de cada vértice - Cada um dos vértices do digrafo deve ter um campo para indicar se já foi ou não visitado, e outro campo para o número de visitação, campos estes a serem usados em eventuais buscas em profundidade 2. Formar para cada vértice sua lista de contraadjacências, ou seja, a lista de todos os vértices dos quais ele é adjacente.
3. Escrever na tela sua estrutura de listas de adjacências, com as informações nos vértices, incluindo não só os adjacentes, mas também os contra-adjacentes dos vértices 4. Responder se ele é cíclico ou acíclico 5. Se for acíclico, encontrar e imprimir uma de suas possíveis ordenações topológicas 6. Se for cíclico, encontrar e imprimir os vértices e os arcos de cada um de seus componentes fortemente conexos
Exercício 5. 1: Leitura e armazenamento de digrafos Fazer um programa para: n Ler de um arquivo os dados sobre um digrafo, ou seja, seu número de vértices e os adjacentes de cada vértice n Armazenar o digrafo numa estrutura de listas de adjacências n Escrever na tela todo o conteúdo de sua estrutura de listas de adjacências
Declarações para digrafos: 1 3 2 typedef int vertice; struct Celula. Adj; struct Celula. Vertice; struct Grafo; struct Celula. Adj { vertice vert; Celula. Adj *prox; }; visit nvisit 5 2 1 -1 -1 2 -1 -1 5 3 -1 -1 1 4 -1 -1 5 ● 3 ● 5 -1 -1 G Espaco. Vertices nvert 4 4 ● ● 5 aciclico -1
struct Celula. Vertice { A serem logic visit; preenchidos em busca prof int nvisit; Celula. Adj *listadj; A ser alocado }; dinamicamente (malloc) 1 2 3 struct Grafo { Celula. Vertice *Espaco. Vertices; int nvert; logic aciclico; visit nvisit }; 1 -1 -1 A ser preenchido 2 -1 -1 mais adiante 3 -1 -1 /* Variaveis globais */ 4 -1 -1 Grafo G; 5 -1 -1 FILE *filein; G Espaco. Vertices 5 2 5 4 ● ● 1 5 ● 3 ● nvert 4 5 aciclico -1
/* Prototipos de funcoes */ void Ler. Grafo (Grafo *); void Escrever. Grafo (Grafo *); /* Programa Principal: */ int main () { /* Leitura e escrita do grafo */ filein = fopen ("Dados. Grafo. dat", "r"); Ler. Grafo (&G); printf ("n. Grafo G em fase inicialn"); Escrever. Grafo (&G); printf ("nn"); system ("pause"); return 0; }
Exemplo: para o digrafo Possível arquivo de entrada: 5 1 2 1 4 2 5 3 1 3 4 4 5 5 3 6 3 -1 4 0 1 3 2 Número de vértices 5 Arcos: 2 vértices visit nvisit 2 1 -1 -1 2 -1 -1 5 3 -1 -1 1 4 -1 -1 5 ● 3 ● 5 -1 -1 Encerra a leitura quando o primeiro vértice for zero G Espaco. Vertices 4 nvert 4 ● ● 5 aciclico -1
Exemplo: para o digrafo Possível arquivo de entrada: 5 1 2 1 3 1 4 2 5 3 4 3 5 4 5 6 3 -1 4 0 Arcos errados e repetidos: 1 3 2 4 Devem ser ignorados 5 Não encerrar o programa se aparecerem visit nvisit 2 1 -1 -1 2 -1 -1 5 3 -1 -1 1 4 -1 -1 5 ● 3 ● 5 -1 -1 G Espaco. Vertices nvert 4 ● ● 5 aciclico -1
Possível saída na tela: visit nvisit 1 2 3 4 5 -1 -1 -1 Espaco. Vertices 2 5 1 ● 5 ● 3 ● nvert 5 4 ● aciclico -1 1 2 3 5 4
Exercício 5. 2: Construção da lista de contraadjacências de cada vértice (substitui o digrafo reverso) n Contra-adjacente de um vértice v é um vértice do qual v é adjacente n No programa anterior: Acrescentar o campo listcontradj ao tipo Celula. Vertice struct Celula. Vertice { logic visit; int nvisit; Celula. Adj *listadj, *listcontradj; };
Exemplo: no digrafo anterior 1 3 2 4 5 1 sua estrutura com as contra-adjacências: 3 2 4 visit nvisit -1 -1 2 5 -1 5 1 ● 5 Espaco. Vertices 4 ● 1 5 ● 2 nvert 3 4 ● 3 -1 ● 3 1 G 4 5 conexo -1
Exercício 5. 3: Fazer o teste de aciclicidade no digrafo lido Sugestão: implementar o algoritmo e a estratégia apresentados no Capítulo VII das aulas teóricas Poderão ser acrescentados novos campos às structs Celula. Vertice e Celula. Adj
Exercício 5. 4: Se o digrafo for acíclico: n Encontrar e escrever na tela uma de suas possíveis ordenações topológicas Sugestão: implementar o algoritmo e a estratégia apresentados no Capítulo VII das aulas teóricas
Exercício 5. 5: Se o digrafo for cíclico, encontrar os seus componentes fortemente conexos n Numerar cada vértice e cada arco do digrafo com o número do componente fortemente conexo ao qual pertence n Escrever na tela os vértices e os arcos de cada um desses componentes Usar o algoritmo de Kosaraju apresentado no Capítulo VII das aulas teóricas Poderão ser acrescentados novos campos às structs Celula. Vertice e Celula. Adj
- Série estatística conjugada
- Relatorio auto avaliação docente
- Ecocentro aulas
- Aulas de discipulado
- Aulas em haver
- Mis aulas cads
- La vida en las aulas
- Fazemos sempre o que queremos?
- Campusvirtualfhu
- Manfrine aulas
- Aulas virtuales lae
- Estrutura estaticamente indeterminada
- Estruturas homólogas e análogas
- Flambagem
- Teoria das estruturas
- Estrutura geologica da terra