#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置零,0表示未被访问,1表示已被访问
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");
}
}
}
测试数据:
8 6
0 7
0 1
2 0
4 1
2 4
3 5
原题见:https://pintia.cn/problem-sets/15/problems/714