从1号顶点开始遍历该连同分支的所有点
#include<stdio.h>
int e[101][101];
int book[101]={0};
int que[101],head,tail;
int cur;
int main(){ //广搜 Breadth First Search
int i,j;
int a,b;
int m,n; //要输入的边数
printf("n: m:\n");
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++) //初始化二维矩阵
for(j=1;j<=n;j++){
if(i==j) e[i][j]=0;
else e[i][j]=e[j][i]=99999; //规定99999为正无穷
}
printf("p1: p2:\n");
for(i=0;i<m;i++){
scanf("%d %d",&a,&b);
e[a][b]=e[b][a]=1;
}
head=1;
tail=1;
que[tail]=1;
tail++;
book[1]=1;
while(head<tail && tail<=n){
cur=que[head];
for(i=1;i<=n;i++){ //邻接矩阵,n表示顶点数
if(e[cur][i]==1 && book[i]==0){
que[tail]=i;
tail++;
book[i]=1;
}
if(tail>n)
break; //为了效率,不写也行
}
head++;
}
for(i=1;i<tail;i++)
printf("%d ",que[i]);
return 0;
}
STL版
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int dif = 999999999;
queue<int> q;
int e[101][101];
int n;
int m,v1,v2,d;
void ini(){
cin >> n;
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]=dif;
}
}
cin >> m;
for(int i=0;i<m;i++){
cin >> v1 >> v2 >> d;
e[v1][v2]=d;
e[v2][v1]=d;
}
}
int main(){
ini();
cout << 1;
q.push(1);
int book[101]={};
book[1]=1;
int cur;
while(!q.empty()){
cur = q.front();
for(int i=1;i<=n;i++){
if(book[i]==0 && e[cur][i]<dif){
cout << i;
q.push(i);
book[i]=1;
}
}
q.pop();
}
return 0;
}