基础算法bfs -剪枝问题

问题描述:一个迷宫有 NXM 格,有一些格子是地板,能走;有一些格子是障碍,不能走。给一个起点S和一个终点D。一只小狗从 S出发,每步走一块地板,在每块地员不能停留,而且走过的地板都不能再走。给定一个 T,问小狗能正好走 T步到达D吗?输入:有很多测试样例。每个测试中,第1行输入整数 N,M,T(1<N,M<7,0<T<50)。后面N 行中,每行输入M 个字符,有这些字符可以输入:'X':墙;S':起点;D:终点;",:地板。最后一行输入'000',表示输入结束。


输出:每个测试,如果狗能到达,输出YES,否则输出 NO。

#include <iostream>
using namespace std;
char mat[8][8], visit[8][8];
int n, m, t;
int flag;
int a, b, c, d;
int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
#define check(xx,yy)(xx>=0&&yy>=0&&xx<n&&yy<n)
void dfs(int time,int x,int y)
{
	if (flag)return;
	if (mat[x][y] =='D')
	{
		if(time==t)flag = 1;
		return;
	}

	int tem = t - time - (abs(c - x) + abs(d - y));
	if (tem < 0) return;
	for (int i = 0; i < 4; i++)
	{
		int xx = x + dir[i][0];
		int yy = y + dir[i][1];
		if (check(xx, yy) && mat[xx][yy] != 'X' && !visit[xx][yy])
		{
			visit[xx][yy] = 1;
			dfs(time + 1, xx, yy);
			visit[xx][yy] = 0;
		}
	}
	return;
}

void solve()
{
	cin >> n >> m >> t;	
	for (int i = 0; i < n; i++)
	{
		int ts = 0;
		for (int j = 0; j < m; j++)
		{
			cin >> mat[i][j];
			if (mat[i][j] == '0')ts++;
			if ('S'== mat[i][j])
			{
				a = i;
				b = j;
			}
			if ('D' == mat[i][j])
			{
				c = i;
				d = j;
			}
			
		}
		if (ts==3) break;
	}

	memset(visit, 0, sizeof(visit));
	int tem = t - abs(c - a) - abs(d - b);
	if (tem &1) { cout << "N0"; return; }
	flag = 0;
	visit[a][b] = 1;
	dfs(0, a, b);
	if (flag)
	{
		cout << "YES" << endl;
	}
	else
	{
		cout << "NO" << endl;
	}
}
signed main()
{
	ios::sync_with_stdio;
	cin.tie(0);
	cout.tie(0);
	int num = 1;

	while (num--)
	{
		solve();
	}
}

相关推荐

  1. 基础算法bfs -剪枝问题

    2024-02-05 06:04:02       49 阅读
  2. DFS和BFS基础算法框架

    2024-02-05 06:04:02       49 阅读
  3. [C++][算法基础]走迷宫(BFS)

    2024-02-05 06:04:02       35 阅读
  4. 蓝桥杯算法基础(37)BFS与DFS

    2024-02-05 06:04:02       26 阅读
  5. 算法----回溯(附录---剪枝

    2024-02-05 06:04:02       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 06:04:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 06:04:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 06:04:02       87 阅读
  4. Python语言-面向对象

    2024-02-05 06:04:02       96 阅读

热门阅读

  1. WPF DispatcherTimer用法

    2024-02-05 06:04:02       52 阅读
  2. 常用的正则表达式

    2024-02-05 06:04:02       52 阅读
  3. 力扣:17. 电话号码的字母组合

    2024-02-05 06:04:02       52 阅读
  4. Vivado Tri-MAC IP端口说明

    2024-02-05 06:04:02       60 阅读
  5. Objective-C中的“description“方法

    2024-02-05 06:04:02       50 阅读
  6. Objective-C 中的SEL

    2024-02-05 06:04:02       45 阅读
  7. 架构篇32:可扩展架构的基本思想和模式

    2024-02-05 06:04:02       45 阅读
  8. 网络爬虫的基本原理

    2024-02-05 06:04:02       47 阅读
  9. 什么是IDE,新手用哪个IDE比较好

    2024-02-05 06:04:02       44 阅读