标题: | 再解炸弹人 | |||
标签: | 搜索 深度优先搜索 广度优先搜索 | |||
详情: | 现在炸弹不是想放在那里就能放在那里的了,必须由小人能够走到的地方才能放置炸弹。比如下面这个例子小人默认站在(3,3)这个位置。请问放在何处最多可以消灭多个敌人。![]() | |||
输入格式: | | |||
输出格式: | | |||
样例: |
|
#include <iostream>
#include <string>
#include <queue>
using namespace std;
string a[51];
int b[51][51];
int n,m,res=0;
typedef struct Node{
int x,y;
}N;
queue<N> que;
void getNum(int x,int y){
int sum=0;
int i=x,j=y;
while(a[i][j]!='#'){
if(a[i][j]=='G')
sum++;
i++;
}
i=x,j=y;
while(a[i][j]!='#'){
if(a[i][j]=='G')
sum++;
i--;
}
i=x,j=y;
while(a[i][j]!='#'){
if(a[i][j]=='G')
sum++;
j++;
}
i=x,j=y;
while(a[i][j]!='#'){
if(a[i][j]=='G')
sum++;
j--;
}
if(sum>res)
res=sum;
}
int main(int argc, char** argv) {
int x,y;
cin>>n>>m>>x>>y;
for(int i=0;i<n;i++)
cin>>a[i];
N node; node.x=x; node.y=y;
que.push(node);
getNum(x,y);
b[x][y]=1;
int next[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
while(!que.empty()){
for(int k=0;k<4;k++){
x=que.front().x+next[k][0];
y=que.front().y+next[k][1];
if(x<0 || x>=n || y<0 || y>=m)
continue;
if(a[x][y]=='.' && !b[x][y]){
b[x][y]=1;
node.x=x; node.y=y;
que.push(node);
getNum(x,y);
}
}
que.pop();
}
cout<<res<<endl;
return 0;
}