C语言建立一个无向图,邻接矩阵为【6】【6】{{0,1,0,0,0,1},{1,0,1,1,0,0},{0,1,0,1,1,0},{0,1,1,0,1,0},{0,0,1,1,0,1},{1,0,0,0,1,0}},在屏幕上输出此邻接矩阵,并输出此无向图的深度遍历结果(以1号顶点为起点,节点分别为1,2,3,4,5,6)
时间: 2023-10-13 15:06:13 浏览: 62
好的,不会透露您的任何要求,以下是C语言代码实现:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 6
int visited[MAX_VERTEX_NUM] = {0}; // 标记数组,初始值为0
void DFS(int adjMat[][MAX_VERTEX_NUM], int v);
int main()
{
int adjMat[MAX_VERTEX_NUM][MAX_VERTEX_NUM] = {
{0, 1, 0, 0, 0, 1},
{1, 0, 1, 1, 0, 0},
{0, 1, 0, 1, 1, 0},
{0, 1, 1, 0, 1, 0},
{0, 0, 1, 1, 0, 1},
{1, 0, 0, 0, 1, 0}
};
int i, j;
printf("邻接矩阵:\n");
for (i = 0; i < MAX_VERTEX_NUM; i++) {
for (j = 0; j < MAX_VERTEX_NUM; j++) {
printf("%d ", adjMat[i][j]);
}
printf("\n");
}
printf("深度遍历结果:\n");
DFS(adjMat, 0); // 从第一个顶点开始遍历
return 0;
}
void DFS(int adjMat[][MAX_VERTEX_NUM], int v)
{
int i;
visited[v] = 1; // 标记v已被访问
printf("%d ", v + 1); // 输出顶点v的编号
for (i = 0; i < MAX_VERTEX_NUM; i++) {
if (adjMat[v][i] == 1 && visited[i] == 0) { // 如果v和i之间有边,并且i未被访问
DFS(adjMat, i); // 从i开始深度遍历
}
}
}
```
输出结果为:
```
邻接矩阵:
0 1 0 0 0 1
1 0 1 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 0 1 1 0 1
1 0 0 0 1 0
深度遍历结果:
1 2 3 4 5 6
```
阅读全文