无向图创建邻接矩阵、广度优先遍历
时间: 2024-01-10 07:02:28 浏览: 105
利用邻接矩阵实现图的广度优先遍历
无向图创建邻接矩阵的步骤如下:
1. 定义一个结构体来存储无向图的邻接矩阵,包括顶点表和邻接矩阵。
2. 在顶点表中存储每个顶点的信息。
3. 在邻接矩阵中,对于每个顶点,用0或1表示与其他顶点是否相邻,其中0表示不相邻,1表示相邻。
4. 根据需要,可以在结构体中添加顶点数和边数等信息。
下面是一个示例代码:
```c++
#define MVNum 100 //最大顶点数
//定义无向图邻接矩阵
struct AMGraph {
string vexs[MVNum]; //顶点表
int arcs[MVNum][MVNum]; //邻接矩阵
int vexnum, arcnum; //图的当前定点数和边数
};
//创建无向图邻接矩阵
void CreateUDN(AMGraph &G) {
cout << "请输入顶点数和边数:" << endl;
cin >> G.vexnum >> G.arcnum;
cout << "请输入顶点信息:" << endl;
for (int i = 0; i < G.vexnum; i++) {
cin >> G.vexs[i];
}
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
G.arcs[i][j] = 0;
}
}
cout << "请输入每条边的两个顶点:" << endl;
for (int k = 0; k < G.arcnum; k++) {
int i, j;
cin >> i >> j;
G.arcs[i][j] = 1;
G.arcs[j][i] = 1;
}
}
```
广度优先遍历是一种图的遍历算法,它从图的某个顶点开始,依次访问该顶点的所有邻接点,然后再依次访问这些邻接点的邻接点,直到遍历完整个图。广度优先遍历需要借助队列来实现。
下面是一个示例代码:
```c++
//广度优先遍历
void BFS(AMGraph G, int v) {
queue<int> Q;
bool visited[MVNum] = {false};
cout << G.vexs[v] << " ";
visited[v] = true;
Q.push(v);
while (!Q.empty()) {
int i = Q.front();
Q.pop();
for (int j = 0; j < G.vexnum; j++) {
if (G.arcs[i][j] == 1 && !visited[j]) {
cout << G.vexs[j] << " ";
visited[j] = true;
Q.push(j);
}
}
}
}
```
阅读全文