DFS遍历
/*
5 5
1 2
1 3
1 5
2 4
3 5
*/
#include <iostream>
using namespace std;
static const int INF = 999999;//无穷大
int sum = 0;
int n,e[101][101],book[101];
void dfs(int cur){//cur为当前节点编号
cout<<cur<<endl;
sum++;
if(sum==n){//访问完所有节点
return;
}
for(int i=1;i<=n;i++){
if(e[cur][i]==1&&book[i]==0){//如果当前节点和i节点相连并且没有被访问
book[i]=1;
dfs(i);//以顶点i再次出发
}
}
return;
}
int main(){
int m;
cin>>n>>m;//n为顶点总个数
int a,b;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){//初始化
if(i==j){
e[i][j]=0;
}else{
e[i][j]=INF;
}
}
}
for(int i=1;i<=m;i++){
cin>>a>>b;
e[a][b]=1;
e[b][a]=1;
}
book[1]=1;
dfs(1);
return 0;
}
同一道题,DFS遍历
//BFS遍历
/*
5 5
1 2
1 3
1 5
2 4
3 5
*/
#include <iostream>
using namespace std;
int book[101],e[101][101];
static const int INF = 99999;
int main(){
int n,m,a,b,cur;
int que[10001],head,tail;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){//初始化
if(i==j){
e[i][j]=0;
}else{
e[i][j]=INF;
}
}
}
for(int i=1;i<=m;i++){//读入边
cin>>a>>b;
e[a][b]=1;
e[b][a]=1;
}
//队列初始化
head = 1;
tail = 1;
//从1结点出发
que[tail]=1;
tail++;
book[1]=1;
while(head<tail){//当队列不为空时
cur = que[head];
for(int i=1;i<=n;i++){
if(e[cur][i]==1&&book[i]==0){
que[tail]=i;
tail++;
book[i]=1;
}
if(tail>n){
break;
}
}
head++;
}
for(int i=1;i<tail;i++){
cout<<que[i]<<" ";
}
return 0;
}