NYOJ 499 迷宫

NYOJ 499 迷宫 链接
这道题是一个深搜思想, 开始自己在自己想用广搜  可能不能用广搜吧吧, 反正我是没弄出来!其实深搜自己想了不过没想出来杂用·····看了别人的函数恍然醒悟  下面 说下这个深搜咋回事
1:写深搜函数时我是难在不知道咋写, 看见别人代码 恍然知道, 对啊  四个方向都要搜索的的  函数内要分  上下左右 四次调用自身的
2:写出递归 时有一个地方,就是四个递归后面的清零 , 自己怎么也不知道该放哪了,最后还是看了启蒙我得那个 代码跟踪下明白咋回事了, 因为在递归调用前为了表示已经 访问过, 赋值为一了, 在返回上级时则要清零 其实很直白, 你要在四个方向全都访问过  才能把它清零, 这样想 你的清零就有点理所当然的放在四个递归之后  知道后感觉理所当然  而自己考虑时因为掌握不太熟  就有点无从下手的感觉!
#include<stdio.h>
#include<string.h>

int a[10][10], count, n, m;
int b[10][10];
void DFS(int x, int y)
{
	if(x > n || x < 1 || y > m || y < 1 || a[x][y] == 1)
	{
		
		return ;
	}
	if(x == n && y == m)
	{
		count++;
		return ;
	}
	a[x][y] = 1;//赋值为一
	DFS(x + 1, y);
	DFS(x - 1, y);
	DFS(x, y + 1);
	DFS(x, y - 1);
	a[x][y] = 0;//我靠   想到要清零了  不过不知道把这个语句放哪 我去 
}


int main()
{
	int t, i, j;
	scanf("%d", &t);
	while(t--)
	{
		count = 0;
		memset(b, 0, sizeof(b));
		scanf("%d%d", &n, &m);
		for(i = 1; i <= n; i++)
		{
			for(j = 1; j <= m; j++)
			{
				scanf("%d", &a[i][j]);
			}
		}
		DFS(1, 1);
		printf("%d\n", count);
	}
	return 0;
}
点击打开链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值