输入样例:
8 6
0 7
0 1
2 0
4 1
2 4
3 5
输出样例:
{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }
源码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max 10
typedef struct Gnode* ptrtoG;
struct Gnode{
int nv,ne;
int G[Max][Max];
};
int state[Max]={0};
ptrtoG create(int N,int E)
{
ptrtoG G;
G=(ptrtoG)malloc(sizeof(struct Gnode));
G->nv=N;
G->ne=E;
int i,j,a,b;
for(i=0;i<Max;i++)
{
for(j=0;j<Max;j++)
{
G->G[i][j]=0;
}
}
for(i=0;i<E;i++)
{
scanf("%d%d",&a,&b);
G->G[a][b]=G->G[b][a]=1;
}
return G;
}
void DFS(ptrtoG G,int n)
{
int i;
printf(" %d",n);
state[n]=1;
for(i=0;i<G->nv;i++)
{
if(G->G[n][i]&&!state[i])
{
DFS(G,i);
}
}
}
void DFSshow(ptrtoG G)
{
int i;
while(1)
{
for(i=0;i<G->nv;i++)
{
if(!state[i])
break;
}
if(i==G->nv)
break;
printf("{");
DFS(G,i);
printf(" }\n");
}
}
void BFS(ptrtoG G,int n)
{
int queue[500];
int front=0,rear=0;
queue[++rear]=n;
state[n]=1;
while(front!=rear)
{
int t=queue[++front];
printf(" %d",t);
int i;
for(i=0;i<G->nv;i++)
{
if(G->G[t][i]&&!state[i])
{
queue[++rear]=i;
state[i]=1;
}
}
}
}
void BFSshow(ptrtoG G)
{
int i;
while(1)
{
for(i=0;i<G->nv;i++)
{
if(!state[i])
break;
}
if(i==G->nv)
break;
printf("{");
BFS(G,i);
printf(" }\n");
}
}
int main()
{
int N,E,i;
scanf("%d%d",&N,&E);
ptrtoG G;
G=create(N,E);
DFSshow(G);
for(i=0;i<Max;i++)
{
state[i]=0;
}
BFSshow(G);
return 0;
}