Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- int percorrido[21],k,z=1;
- using namespace std;
- typedef struct{
- int are[21],ind;// ind marca o proximo item da lista de adjacencia que sera percorrido
- }grafo;
- void dfs(grafo m[],int i,int x,int tab){
- int j,y;
- z++;
- percorrido[i]=x;// x eh uma flag que muda em funcao do vertice inicial do dfs
- while(m[i].are[m[i].ind]!=-1){ // passa por todas as arestas do vertice(-1 indica o fim da lista de vertices pra qual o vertice 'i' aponta)
- for(j=0;j<tab;j++)
- printf(" ");
- printf(" %d-%d",i,m[i].are[m[i].ind]);
- y=m[i].are[m[i].ind];
- if(percorrido[m[i].are[m[i].ind]]!=x){// verifica se o vertice para o qual se pretende ir ja foi percorrido
- printf(" pathR(G,%d)\n",m[i].are[m[i].ind]);// executa o dfs para o proximo vertice
- dfs(m,y,x,tab+1);
- }
- else
- printf("\n");
- m[i].ind++;
- k=0;
- }
- }
- int main(){
- int v,e,e1,v1,i,j,x,y,n,caso;
- grafo m[21];
- freopen("entrada.txt","r",stdin);
- scanf("%d",&n);
- caso=1;
- while(n--){
- k=1;
- scanf("%d %d",&v,&e);
- for(i=0;i<=v;i++)
- m[i].ind=0;
- for(i=0;i<e;i++){
- scanf("%d %d",&v1,&e1);
- m[v1].are[m[v1].ind]=e1;
- m[v1].ind++;
- }
- for(i=0;i<=v;i++)
- sort(m[i].are,m[i].are+m[i].ind);
- for(i=0;i<v;i++){
- percorrido[i]=-1;
- m[i].are[m[i].ind]=-1;
- m[i].ind=0;
- }
- printf("Caso %d:\n",caso);
- for(i=0;i<v;i++){ // loop que executa o dfs partindo de cada vertice
- percorrido[i]=i; //vetor para verificar se um vertice ja foi percorrido
- dfs(m,i,i,0);
- if(k==0){
- printf("\n");
- k=1;
- }
- }
- printf("%d\n",z);
- caso++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement