用C/C语言写一个二维数组的迷宫,1代表墙,0代表通道
答案:1 悬赏:20 手机版
解决时间 2021-11-14 17:39
- 提问者网友:风月客
- 2021-11-14 08:16
用C/C语言写一个二维数组的迷宫,1代表墙,0代表通道
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-11-14 09:31
如下,是完整代码
#include
#include
#define SIZE 9
void p();//打印迷宫
int pass(int x, int y);//走迷宫
int maze[SIZE][SIZE] =
{
{1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,1},
{1,0,1,1,0,1,1,0,1},
{1,0,1,0,0,1,0,0,1},
{1,0,1,0,1,0,1,0,1},
{1,0,0,0,0,0,1,0,1},
{1,1,0,1,1,0,1,1,1},
{1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1}
};
int Inx = 1, Iny = 1;//设置入口
int Outx = SIZE - 2, Outy = SIZE - 2;//设置出口
int main(void)
{
p();
pass(Inx, Iny);
system("pause");
return 0;
}
void p(void)
{
int i, j;
for (i = 0; i < SIZE; i++)//循环打印输出迷宫
{
for (j = 0; j < SIZE; j++)//因为迷宫是一个二维平面图形,故使用双层for循环
{
//循环遍历迷宫数组中的每个元素,根据该元素得1值,打印不同的符号,从而组成迷宫
if (maze[i][j] == 1)//围墙
{
printf("▇");
}
else if (maze[i][j] == 0)//空地
{
printf(" ");//一个字符占位两字节,一个空格占位一字节,所以空地应输出两个空格
}
else//路
{
printf("☉");
}
}
printf("\n");//打印完一行后换行
}
}
int pass(int x, int y)//递归走迷宫,从初始位置开始,判断路的上下左右四个方向是否走的同(即判断是否为0),将下一个路的坐标作为参数递归调用pass()
{
maze[x][y] = -1;//初始位置为路
if (x == Outx && y == Outy)//如果路的位置已经走到了出口
{
//打印此次路线
printf("路线:\n");
p();
}
if (maze[x + 1][y] == 0)//如果目前已经走到的位置右方是路的话
{
pass(x + 1, y);//将下一步的坐标作为参数执行pass(),相当于往右走了一步
}
if (maze[x][y + 1] == 0)
{
pass(x, y + 1);
}
if (maze[x - 1][y] == 0)
{
pass(x - 1, y);
}
if (maze[x][y - 1] == 0)
{
pass(x, y - 1);
}
maze[x][y] = 0;//
return 0;
}追问您能帮我存储到链表里吗,并且走到死胡同的也要显示特殊的走过标记
#include
#include
#define SIZE 9
void p();//打印迷宫
int pass(int x, int y);//走迷宫
int maze[SIZE][SIZE] =
{
{1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,1},
{1,0,1,1,0,1,1,0,1},
{1,0,1,0,0,1,0,0,1},
{1,0,1,0,1,0,1,0,1},
{1,0,0,0,0,0,1,0,1},
{1,1,0,1,1,0,1,1,1},
{1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1}
};
int Inx = 1, Iny = 1;//设置入口
int Outx = SIZE - 2, Outy = SIZE - 2;//设置出口
int main(void)
{
p();
pass(Inx, Iny);
system("pause");
return 0;
}
void p(void)
{
int i, j;
for (i = 0; i < SIZE; i++)//循环打印输出迷宫
{
for (j = 0; j < SIZE; j++)//因为迷宫是一个二维平面图形,故使用双层for循环
{
//循环遍历迷宫数组中的每个元素,根据该元素得1值,打印不同的符号,从而组成迷宫
if (maze[i][j] == 1)//围墙
{
printf("▇");
}
else if (maze[i][j] == 0)//空地
{
printf(" ");//一个字符占位两字节,一个空格占位一字节,所以空地应输出两个空格
}
else//路
{
printf("☉");
}
}
printf("\n");//打印完一行后换行
}
}
int pass(int x, int y)//递归走迷宫,从初始位置开始,判断路的上下左右四个方向是否走的同(即判断是否为0),将下一个路的坐标作为参数递归调用pass()
{
maze[x][y] = -1;//初始位置为路
if (x == Outx && y == Outy)//如果路的位置已经走到了出口
{
//打印此次路线
printf("路线:\n");
p();
}
if (maze[x + 1][y] == 0)//如果目前已经走到的位置右方是路的话
{
pass(x + 1, y);//将下一步的坐标作为参数执行pass(),相当于往右走了一步
}
if (maze[x][y + 1] == 0)
{
pass(x, y + 1);
}
if (maze[x - 1][y] == 0)
{
pass(x - 1, y);
}
if (maze[x][y - 1] == 0)
{
pass(x, y - 1);
}
maze[x][y] = 0;//
return 0;
}追问您能帮我存储到链表里吗,并且走到死胡同的也要显示特殊的走过标记
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯