Você está na página 1de 6

Lista 3

Teoria dos Grafos (Algoritmos em Grafos)


Prof. Alex Martins
29/01/2015
Entregar: 05/02/2015

1. Escreva uma funo que verifique se um digrafo simtrico.


m.a.
int DIGRAPHsimetrico (Digraph G) {
Vertex v, w;
for (v = 0; v < G->V; v++)
for (w = 0; w < G->V; w++)
if (G->adj[v][w] != G->adj[w][v]){
return 0;
}
return 1;
}

v.l
intEsimetrico(GraphG){
Vertexv,simetrico=0;
linkp,q;
//Confereasimetriadalistadeadjacncia
for(v=0;v<G>V;v++){
for(p=G>adj[v];p!=NULL;p=p>next)
simetrico=0;
for(q=G>adj[p>w];q!=NULL;q=q>next)
{
if(q>w==v){
simetrico=1;
}
}
if(simetrico==0)
return(0);
}
returnsimetrico;
}
2. Escreva uma funo que confira a consistncia da representao de um grafo. Ao
receber um grafo G, a funo deve devolver 1 se a matriz G->adj simtrica e tem
diagonal nula, e se valor de G->A consistente com o contedo de G->adj. Caso
contrrio, a funo deve devolver 0.

m.a.
int DIGRAPHconsistente (Digraph G) {
int cont = 0;
Vertex v, w;
for (v = 0; v < G->V; v++)
for (w = 0; w < G->V; w++){
if (G->adj[v][w] != G->adj[w][v])
return 0;
if (G->adj[v][w] == 1)
cont++;
}
for (v = 0; v < G->V; v++)
if (G->adj[v][v] != 0)
return 0;
if (G->A != cont)
return 0;
return 1;
}

v.l.
intconsistence(GraphG){
Vertexv,z,simetrico=0;
linkp,q;
intcont;
//Confereasimetriadalistadeadjacncia
for(v=0;v<G>V;v++){
for(p=G>adj[v];p!=NULL;p=p>next)
simetrico=0;
for(q=G>adj[p>w];q!=NULL;q=q>next)
{
if(q>w==v)
simetrico=1;
}
if(simetrico==0)
return(0);
}
//Confereainexistenciadelaos
for(v=0;v<G>V;v++){
for(p=G>adj[v];p!=NULL;p=p>next)
if(p>w==v)
return(0);
}

//ConfereaquantidadedearcoscomovalordeG>A

for(v=0;v<G>V;v++){
for(p=G>adj[v];p!=NULL;p=p>next)
cont++;
if(cont!=G>A)
return0;
}
return(1);//econsistente
}
3. Escreva uma funo GRAPHdeg que devolva o grau de um vrtice v num grafo G.
m.a.
int GRAPHdeg (Digraph G, Vertex v) {
int deg = 0;
Vertex w;
for (w = 0; w < G->V; w++)
if (G->adj[v][w] == 1)
deg++;
return deg;
}
/*Grau de entrada*/
void GRAPHdeg(Digraph G, Vertex v)
{
// Vertex v;
int deg = 0;
link p;
for (p = G->adj[v]; p != NULL; p = p->next)
deg++;
printf("Grau de entrada do grafo: %d", deg);
}

4. Escreva uma funo DIGRAPHindeg que devolva o grau de entrada de um


vrtice v num digrafo G.
m.a.
int DIGRAPHindeg (Digraph G, Vertex v) {
int indeg = 0;
Vertex w;
for (w = 0; w < G->V; w++)
if (G->adj[w][v] == 1)
indeg++;
return indeg;
}

v.l.
void DIGRAPHindeg(Digraph G, Vertex z)
{
Vertex v;
int indeg = 0;
link p;
for (v = 0; v < G->V; v++){
for (p = G->adj[v]; p != NULL; p = p->next)
if (p->w == z)
indeg++;
printf("Grau de entrada do digrafo: %d", indeg);
}
}

5.Modifique DIGRAPHpath de modo que ela imprima os vrtices que


participam do caminho de s a t.
imprimeCaminhoAoContrrio(DigraphG,Vertexs,Vertext){
Vertexw;
for(w=t;w!=s;w=parnt[w])
printf("%d",w);
printf("%d\n",s);
}

imprimeCaminho(DigraphG,Vertexs,Vertext){
Vertexw,pilha[maxV];
inttopo=0;
for(w=t;w!=s;w=parent[w])
pilha[topo++]=w;
printf("%d",s);
while(topo>0)
printf("%d",pilha[topo]);
printf("\n");
}
[As 5 primeiras devem ser feitas usando Matriz de adjacncias e Vetor de lista de adjascncias]

6. Modifique DIGRAPHpath de modo que DIGRAPHpath(G,s,t,d) verifique a existncia de um


caminho simples de s a t que tenha comprimento pelo menos d.
7. Escreva uma funo que verifique se uma sequncia seq[0..k] de vrtices de um digrafo um
caminho simples. A funo deve devolver -1 se a sequncia no um caminho, 0 se a sequncia
um caminho simples, 1 se a sequncia um caminho no simples. Faa duas verses da funo:
uma supe que o digrafo dado por sua matriz de adjacncia e outra supe que o digrafo dado por
listas de adjacncia.
8. Mostre as bibliotecas de matriz de adjacncias e Lista de adjacncias
com suas devidas buscas de caminho implementadas.

Você também pode gostar