首页 > 代码库 > 第六届华为创新杯编程大赛-进阶1第3轮

第六届华为创新杯编程大赛-进阶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;
}