写完了栈的两种实现方式的博客,我们来看利用栈来寻路:
栈的特性适合来存储路径坐标,并且撞墙后可以以栈的弹顶元素来实现回退功能,所以用栈来实现这个算法,我这里运用的是深度优先搜索思想了(虽然我没有特别明显的dfs函数,大佬请不要喷,本菜面对的是新手)
首先我们绘迷宫肯定是二维数组实现了,但是存储这个点就需要结构体了所以我们来封装一下:
struct point {
int x;
int y;
};
接下来用栈来存储路径
struct point path[100];//存放路径
int stacktop = -1;//栈顶标记
接下来为二维数组分配空间:
int** map = NULL;//二维数组
int size = 0;//迷宫大小
struct point here = {
1,1};//当前位置
int** makemap(int x, int y) {
int** array = (int**)malloc(sizeof(int*)*x);
for (int i = 0; i < y; i++) {
array[i] = (int*)malloc(sizeof(int)*x);
}
return array;
}
创建地图,让用户来输入:
void createmap() {
printf("输入一个迷宫大小:");
scanf("%d", &size);
map = makemap(size + 2, size + 2);//加2表示外边框
printf("输入迷宫");
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
scanf("%d", &map[i][j]);
}
}
//加边框,1表示边框
for (int i = 0; i <= size + 1; i++) {
map[0][i] = map[size + 1][i] = 1;//上下的墙
map[i][0] = map[i]