将图表示为邻接矩阵
#include<iostream>
using namespace std;
int main() {
int i,j,n, m, e[100][100], book[100] = { 0 }, cur, a, b;
int que[10000], head, tail;
cout << "输入元素个数和顶点之间的边的个数" << endl;
cin >> n >> m;
for (i = 1; i <= n; i++)//初始化二维矩阵
for (j = 1; j <= n; j++) {
if (i == j)
e[i][j] = 0;//对角线都是0,因为每个点自己不能到自己
else
e[i][j] = 9999999;//其他点设为无穷大
}
cout << "输入" << endl;
for (i = 1; i <= m; i++) {
cin >> a >> b;
e[a][b] = 1;//顶点i到顶点j有边
e[b][a] = 1;//由于是无向图,反过来一样
}
head = 1; tail = 1;//初始化队列
que[tail] = 1;//从1号顶点出发
tail++;
book[1] = 1;
while (head < tail) {
cur = que[head];//当前顶点编号
for (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 (i = 1; i < tail; i++)
cout << que[i];
return 0;
}
例如:
输入
5 5
1 2
1 3
1 5
2 4
3 5
输出1 2 3 5 4