输入m,n,代表无向图中有m个点,n条边,接下来输入n行,每行包含两个数据,分别是这条边的起始点和终止点。输出无向图的深搜顺序。
#include<iostream>
using namespace std;
int a[105][105],n,m;//
int vis[105];
int q[105];// q 模拟队列
int head=1,tail=1;
// head 指队首,tail 指队尾(元素填入的位置,最后一个元素的下一个位置)
void bfs(){
// 第一个结点添加到数组中
vis[1]=1;
q[tail]=1;
tail++;
cout<<1;
while(head<tail){
// 搜索队首(head指向的结点)所能到达的每个结点,添加到队尾(tail)的位置
for(int i=2;i<=n;i++){
if(vis[i]==0 && a[q[head]][i]==1){
vis[i]=1;
q[tail]=i;
tail++;
cout<<"--->"<<i;
}
}
// 队首元素出队(head向后移动一位)
head++;}
}
int main(){
int x,y;
cin >> n >> m;
while(m--){
cin >> x >> y;
a[x][y]=1;
a[y][x]=1;
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout << a[i][j] << " ";
// }
// cout << endl;
// }
// breadth first search bfs
bfs();
return 0;
}