第六届华为创新杯编程大赛-进阶1第3轮

题目忘记粘贴了,题目大致意思就是笨笨熊要搬家,它现在的家在B点,新的豪宅在H点,现在要从B点到H点

地图R表示行,C表示列,其中:

-表示能通过

#表示不能通过

B表示笨笨熊原来的家

H表示笨笨熊的新豪宅

输入

R

C

R×C矩阵

输出

Y//表示可以通过

N//表示不可以通过

解析:本来这道题很明显,很简单的搜索嘛,但是不知道是因为自己很长时间不写搜索了还是怎么回事,一直在改代码,最后在超过时间给提交上去了,但是最后竟然还返回分数了,完美AC哈!

直接贴个代码

#include <iostream>
using std::endl;
using std::cin;
using std::cout;
char map[100][100];
bool flag=false;
int R,C;
void dfs(int p,int q)
{
	if(p>=0&&p<R&&q>=0&&q<C&&map[p][q]=='H')
	{
		flag = true;
		return;
	}
	if(map[p-1][q]=='-'||map[p-1][q]=='H')
	{
		if(map[p-1][q]=='-')
			map[p-1][q]='a';
		dfs(p-1,q);
	}
	if(map[p+1][q]=='-'||map[p+1][q]=='H')
	{
		if(map[p+1][q]=='-')
			map[p+1][q]='a';
		dfs(p+1,q);
	}
	if(map[p][q-1]=='-'||map[p][q-1]=='H')
	{
		if(map[p][q-1]=='-')
			map[p][q-1]='a';
		dfs(p,q-1);
	}
	if(map[p][q+1]=='-'||map[p][q+1]=='H')
	{
		if(map[p][q+1]=='-')
			map[p][q+1]='a';
		dfs(p,q+1);
	}
}
int main()
{
	cin >> R >> C;
	int tempi,tempj;
	for(int i=0;i<R;++i)
		for(int j=0;j<C;++j)
		{
			cin >> map[i][j];
			if(map[i][j]=='B')
			{
				tempi = i;
				tempj = j;
			}
		}
	dfs(tempi,tempj);
	if(flag==true)
		cout << "Y" << endl;
	else
		cout << "N" << endl;
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值