题目忘记粘贴了,题目大致意思就是笨笨熊要搬家,它现在的家在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;
}