因为这个题当放置炸弹可以炸掉敌人最多的时候,人物不一定能走到那个位置,所以搜索任务可以走的位置,然后计算这点上可以消灭多少敌人
特殊注意以下两个搜索都别忘记对最开始的起点进行getboom和visit,就相当于假设出发点就为可以消灭敌人最多的点
bfs
<span style="font-size:14px;">#include <iostream>
using namespace std;
struct node
{
int x;
int y;
};
struct node que[401];
char map[50][50];
int visit[50][50];
int next_[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int n,m,tx,ty,startx,starty,sum,max_=0;
int head,tail,mx,my;
int getboom(int x,int y)
{
int sum_=0,i,j;
i=x,j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
i--;
}
i=x;j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
i++;
}
i=x;j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
j--;
}
i=x;j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
j++;
}
return sum_;
}
int main()
{
int i,j;
n=13,m=13;
startx=3,starty=3;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>map[i][j];
}
}
head=tail=1;
que[tail].x=startx;
que[tail].y=starty;
visit[startx][starty]=1; max_=getboom(startx,starty);
tail++;
mx=startx;
my=starty;
while(head<tail)
{
for(i=0;i<4;i++)
{
tx=que[head].x+next_[i][0];
ty=que[head].y+next_[i][1];
if(tx<1 || tx>n || ty<1 || ty>m)
continue;
if(map[tx][ty]=='.' && visit[tx][ty]==0)
{
visit[tx][ty]=1;
que[tail].x=tx;
que[tail].y=ty;
tail++;
sum=getboom(tx,ty);
if(sum>max_)
{
max_=sum;
mx=tx;
my=ty;
}
}
}
head++;//四个方向都探索完了后,这个点就可以出队列了所以在for语句外写
}
cout<<max_<<' '<<mx<<' '<<my;
}
//#############
//#GG.GGG#GGG.#
//###.#G#G#G#G#
//#.......#..G#
//#G#.###.#G#G#
//#GG.GGG.#.GG#
//#G#.#G#.#.#.#
//##G...G.....#
//#G#.#G###.#G#
//#...G#GGG.GG#
//#G#.#G#G#.#G#
//#GG.GGG#G.GG#
//#############</span>
dfs
#include <iostream>
using namespace std;
char map[50][50];
int visit[50][50];
int next_[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int n,m,tx,ty,startx,starty,sum,max_=0;
int head,tail,mx,my;
int getboom(int x,int y)
{
int sum_=0,i,j;
i=x,j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
i--;
}
i=x;j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
i++;
}
i=x;j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
j--;
}
i=x;j=y;
while(map[i][j]!='#')
{
if(map[i][j]=='G')
sum_++;
j++;
}
return sum_;
}
void dfs(int x,int y)
{
int i;
for(i=0;i<4;i++)
{
tx=x+next_[i][0];
ty=y+next_[i][1];
if(tx<1 || tx>n || ty<1 || ty>m)
continue;
if(map[tx][ty]=='.' && visit[tx][ty]==0)
{
visit[tx][ty]=1;
sum=getboom(tx,ty);
if(sum>max_)
{
max_=sum;
mx=tx;
my=ty;
}
dfs(tx,ty);
//visit[tx][ty]=0;
}
}
}
int main()
{
int i,j;
n=13,m=13;
startx=3,starty=3;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>map[i][j];
}
}
visit[startx][starty]=1;
max_=getboom(startx,starty);
mx=startx;
my=starty;
dfs(startx,starty);
cout<<max_<<' '<<mx<<' '<<my;
}
//#############
//#GG.GGG#GGG.#
//###.#G#G#G#G#
//#.......#..G#
//#G#.###.#G#G#
//#GG.GGG.#.GG#
//#G#.#G#.#.#.#
//##G...G.....#
//#G#.#G###.#G#
//#...G#GGG.GG#
//#G#.#G#G#.#G#
//#GG.GGG#G.GG#
//#############