#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