c语言,用二维数组解决迷宫问题。来段完整的代码吧。

如题所述

好的,以下是使用二维数组解决迷宫问题的C语言代码示例:

Copy code
#include <stdio.h>

#define ROW 6 // 迷宫行数
#define COL 6 // 迷宫列数

int maze[ROW][COL] = { // 迷宫地图 1表示障碍,0表示通路
{1, 1, 1, 1, 1, 1},
{1, 0, 0, 1, 0, 1},
{1, 0, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 0, 1},
{1, 1, 1, 1, 1, 1},
};

int result[ROW][COL]; // 存放走迷宫的结果

int dfs(int row, int col) {
if (row == ROW - 1 && col == COL - 1) { // 到达终点
result[row][col] = 1;
return 1;
}
if (maze[row][col] == 0) { // 当前位置是通路
result[row][col] = 1;
if (row < ROW - 1 && dfs(row + 1, col)) { // 向下走有解
return 1;
}
if (col < COL - 1 && dfs(row, col + 1)) { // 向右走有解
return 1;
}
result[row][col] = 0; // 标记走过的路
}
return 0; // 返回无解
}

void print_result() {
printf("走迷宫的结果:\n");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
}

int main() {
if (dfs(0, 0)) { // 从起点开始走迷宫
print_result();
} else {
printf("无法走出迷宫!\n");
}
return 0;
}
上述代码中,我们使用了一个二维数组 maze 来表示迷宫地图,其中 1 表示障碍,0 表示通路;另一个二维数组 result 用来存储走迷宫的结果,其中 1 表示该位置走通了, 0 表示该位置没有走通。

我们使用 dfs 函数来进行深度优先搜索,从起点 (0, 0) 开始往下、往右走,直到走到终点 (ROW-1, COL-1),如果存在通路,则将路径标记在 result 数组中,并返回 1,否则返回 0 表示无解。

最后,我们在 main 函数中调用 dfs 函数,判断是否能从起点走出迷宫,如果有解,则输出走迷宫的结果;否则,输出 "无法走出迷宫" 的提示。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-20
#include<stdio.h>
#define MaxSize 20
typedef struct{
int i;
int j;
}BOX;
typedef struct{
BOX data[MaxSize];
int length;
}PathType;

void display(PathType path)
{
static int time = 0;
int k;
printf("输出第%d条路径:\n", ++time);
for (k = 0; k<path.length; k++)
printf(" (%d %d)", path.data[k].i, path.data[k].j);
printf("\n");
}
void mgpath(int mg[20][20], int xi, int yi, int x2, int y2, PathType path)
{
int di, i, j;
if (xi == x2&&yi == y2)
{
path.data[path.length].i = xi;
path.data[path.length].j = yi;
path.length++;
display(path);
}
else{
if (mg[xi][yi] == 0)
{
di = 0;
while (di<4)
{
path.data[path.length].i = xi;
path.data[path.length].j = yi;
path.length++;
switch (di)
{
case 0:
i = xi - 1;
j = yi;
break;
case 1:
i = xi;
j = yi + 1;
break;
case 2:
i = xi + 1;
j = yi;
break;
case 3:
i = xi;
j = yi - 1;
break;
}
mg[xi][yi] = -1;
mgpath(mg, i, j, x2, y2, path);
mg[xi][yi] = 0;
path.length--;
di++;
}
}
}
}
int main()
{
PathType path;
int i, j;
int M, N;
int x1, x2, y1, y2;
int mg[20][20];
scanf_s("%d%d", &M, &N);
for (i = 0; i<M; i++)
for (j = 0; j<N; j++)
{
scanf_s("%d", &mg[i][j]);
}
scanf_s("%d%d%d%d", &x1, &y1, &x2, &y2);
path.length = 0;

mgpath(mg, x1,y1,x2,y2,path);
return 0;
}本回答被提问者和网友采纳
第2个回答  2015-10-21
你想要具体解决什么问题,题目发给我我可以帮你写
相似回答