🍬个人主页:Yanni.—
🌈数据结构:Data Structure.
🎂C语言笔记:C Language Notes
🏀OJ题分享: Topic Sharing
前言:
在笔试或者竞赛的过程中,经常会遇到迷宫问题,今天用c语言给大家带来初入迷宫的思路,以及一些复杂条件增加的迷宫问题,相信大家看完之后会收获满满!
基础迷宫

这道OJ题曾经是百度某一年的其中一个笔试题,迷宫问题的本质就是一个图遍历问题,从起点开始不断四个方向探索,直到走到出口,走的过程我们可以借助数据结构-栈来记录走过路径的坐标。
栈记录坐标有两方面的作用:
1.记录走过的路径
2.便于走到死路时进行回溯找其他的通路
创建迷宫
我们把迷宫想象成xy坐标轴上的坐标,创造出一个二维数组,考虑到空间需要自己输入,所以我们这里开辟动态二维数组,要开辟动态二维数组,有两个操作。
1.创造指针数组
2.在指针数组的基础上开辟动态数组空间
typedef struct postion
{
int row;
int col;
}PT;
int main()
{
int N = 0, M = 0;
while (scanf("%d%d", &N, &M) != EOF)
{
//要开辟二维数组,首先开辟指针数组
int** maze = (int**)malloc(sizeof(int*) * N);
//开辟每条数组的空间
for (int i = 0; i < N; i++)
{
maze[i] = (int*)malloc(sizeof(int) * M);
}
//二维数组的输入
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
scanf("%d", &maze[i][j]);
}
}
PtintMaze(maze, N, M);
StackInit(&path);
PT entry = { 0,0 };
if (GetMazePath(maze, N, M, entry))
{
PrintPath(&path);
}
else {
printf("没有找到通路");
}
StackDestory(&path);
//二维数组的销毁
for (int i = 0; i < N; i++)
{
free(maze[i]);
}
free(maze);
maze = NULL;
}
retu

最低0.47元/天 解锁文章
2万+





