在BFS优先遍历过程中要用到队列,这里数据较少,不要用繁琐的循环队列结构,只要用一个数组就可解决了。
#include<stdio.h>
#include<string.h>
#define MAXN 10
int visit[MAXN];
int G[MAXN][MAXN];
void DFS(int i,int N)
{
int j;
visit[i]=1;
printf(" %d",i);
for(j=0;j<N;j++)
{
if(!visit[j]&&G[i][j])
DFS(j,N);
}
}
void BFS(int i,int N)
{
int queue[MAXN],rear,front,v,j;
rear=front=-1;
visit[i]=1;
queue[++rear]=i;
while(front<rear)
{
v=queue[++front];
printf(" %d",v);//将连通的点输出
for(j=0;j<N;j++)
{
if(!visit[j]&&G[v][j])
{
visit[j]=1; //访问过后标记
queue[++rear]=j;
}
}
}
}
int main()
{
int N,E,i,x,y;
scanf("%d %d",&N,&E);
memset(visit,0,sizeof(visit));//将visit置零
for(i=0;i<E;i++)
{
scanf("%d %d",&x,&y);
G[x][y]=G[y][x]=1;
}
for(i=0;i<N;i++)//DFS遍历
{
if(!visit[i])
{
printf("{");
DFS(i,N);
printf(" }\n");
}
}
memset(visit,0,sizeof(visit));//将visit置零
for(i=0;i<N;i++)
{
if(!visit[i])
{
printf("{");
BFS(i,N);
printf(" }\n");
}
}
}