C语言图论邻接矩阵解决迷宫问题
时间: 2024-05-10 09:10:44 浏览: 98
C语言图论中,可以使用邻接矩阵来解决迷宫问题。邻接矩阵是一种表示图的数据结构,其中矩阵的行和列分别表示图中的顶点,矩阵中的元素表示顶点之间的边或弧的关系。
下面是一个使用邻接矩阵解决迷宫问题的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
typedef struct {
int vexs[MAX_VERTEX_NUM]; // 顶点向量
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum, arcnum; // 图的当前顶点数和弧(边)数
} AdjMatrix;
void createMaze(AdjMatrix *G, int n) {
G->vexnum = n;
G->arcnum = n * n;
// 初始化邻接矩阵
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = 0;
}
}
// 构建迷宫的邻接矩阵
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
if (i == 0 || i == G->vexnum - 1 || j == 0 || j == G->vexnum - 1) {
G->arcs[i][j] = 1; // 边界上的顶点与外部相连
} else {
G->arcs[i][j] = 0; // 内部顶点之间没有边
}
}
}
}
void printMaze(AdjMatrix G) {
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
printf("%d ", G.arcs[i][j]);
}
printf("\n");
}
}
int main() {
int n;
printf("请输入迷宫的大小:");
scanf("%d", &n);
AdjMatrix G;
createMaze(&G, n);
printf("迷宫的邻接矩阵表示如下:\n");
printMaze(G);
return 0;
}
```
这段代码中,首先定义了一个邻接矩阵的结构体`AdjMatrix`,包含顶点向量和邻接矩阵两个成员变量。然后通过`createMaze`函数创建迷宫的邻接矩阵,其中边界上的顶点与外部相连,内部顶点之间没有边。最后通过`printMaze`函数打印出迷宫的邻接矩阵。
阅读全文