第六屆華為創新杯程式設計大賽-進階1第3輪

jsjliuyun發表於2014-05-07

題目忘記貼上了,題目大致意思就是笨笨熊要搬家,它現在的家在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;
}

相關文章