<pre name="code" class="cpp">//DFS和BFS实际来源于图的深度优先遍历和图的广度优先遍历
//并且得到了很多功能延伸
//图的深度优先遍历
#include <stdio.h>
#include <stdlib.h>
#define INF 1000000
int map[101][101];//存图
int book[101];//标记
int n;//点的个数
int m;//边的个数
int sum=0;//已遍历的点的个数
void dfs(int cur)//当前所在的顶点编号
{
printf("%d\n",cur);
sum++;
if(sum==n)
return;
for(int i=1;i<=n;i++){
if(map[cur][i]==1&&book[i]==0){
book[i]=1;
dfs(i);
}
}
return;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
int a,b;//边的顶点
for(int i=1;i<=m;i++){//读边
scanf("%d%d",&a,&b);
map[a][b]=1;
map[b][a]=1;
}
memset(book,0,sizeof(book));
book[1]=1;
dfs(1);
return 0;
}
//图的广度优先遍历
#include <stdio.h>
#include <stdlib.h>
#define INF 100000
int map[101][101];
int book[100];
int queue[100];
int head=0;
int tail=0;
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
int a,b;
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
map[a][b]=map[b][a]=1;
}
queue[tail++]=1;
book[1]=1;
while(head<tail&&tail<=n){
int cur=queue[head];
for(int i=1;i<=n;i++){
if(map[cur][i]==1&&book[i]==0){
book[i]=1;
queue[tail++]=i;
}
}
if(tail==n)
break;
head++;
}
for(int i=0;i<tail;i++)
printf("%d ",queue[i]);
return 0;
}