NYOJ 523 (深搜,不可用的方法)

本文探讨了一种使用深度优先搜索解决三维迷宫问题的方法,通过定义迷宫状态、路径搜索和终止条件,实现了从起始点到终点的最短路径查找。代码实现展示了递归调用在复杂空间导航中的应用,以及如何优化搜索过程以避免无效路径。文章还讨论了代码执行流程、关键变量的作用和输出结果分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
int dir[6][3] = {{0,0,1},{0,0,-1},{1,0,0},{-1,0,0},{0,1,0},{0,-1,0}};
int map[55][55][55];
int A, B, C, T;
int minute;

void count(int step, int x, int y, int z)
{
	//printf("step:%d\n",step);
	int i, m, n, p;
	if(step > T){
		return;
	}
	else if(x == A - 1 && y == B - 1 && z == C - 1){
		if(step < minute)//寻找最短时间
			minute = step;
		return;
	}
	else{
	//	printf("pro3\n");
		for(i = 0; i < 6; i++){

		//	printf("step:%d\n",step);
		//	printf("i : %d\n", i);
			m = x, n = y, p = z;
			m = m + dir[i][0];
			n = n + dir[i][1];
			p = p + dir[i][2];

			if(m < 0 || n < 0 || p < 0 || m >= A || n >= B || p >= C || map[m][n][p] == 1){
				//printf("m:%d n:%d p:%d\n",m, n, p);
				continue;
			}
			else{
				//	printf("map[%d][%d][%d]\n",m, n, p);
				map[m][n][p] = 1;
				count(step + 1,m, n, p);
				map[m][n][p] = 0;
			}
		}
	}
}

int main(){

	int i, j, k;// for count;
	int n;
	scanf("%d", &n);
	while(n--){

		minute = 1000000;
		scanf("%d%d%d%d",&A,&B,&C,&T);
		for(i = 0; i < A; i++)	
			for(j = 0; j < B; j++)
				for(k = 0; k < C; k++){

					scanf("%d",&map[i][j][k]);
				}
		map[0][0][0] = 1;
		count(0, 0, 0, 0);
		if(minute <1000000){
			printf("minute:%d\n", minute);
		}
		else
			printf("-1\n");
	}
	return 0;
}
深搜虽然不可用,但是 也见识到了新的方法
关于输出
我的结果虽然对了却因为 没考虑全什么情况下会返回而错误了
3种请况下会返回:1 无路可走 2 时间超了 3 到终点了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值