数据结构之利用栈寻路(深度优先搜索)

写完了栈的两种实现方式的博客,我们来看利用栈来寻路:
栈的特性适合来存储路径坐标,并且撞墙后可以以栈的弹顶元素来实现回退功能,所以用栈来实现这个算法,我这里运用的是深度优先搜索思想了(虽然我没有特别明显的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]
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值