Escolar Documentos
Profissional Documentos
Cultura Documentos
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);
}
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);
}
}
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]