#include<stdio.h>
int main()
{
char a[20][21];//假设这里地图不超过20*20
int i,j,sum,map=0,p,q,x,y,n,m;
//读入n和m表示有n行m列
scanf("%d %d",&n,&m);
//读入n行字符
for(i=0;i<=n-1;i++)
{
scanf("%s",a[i]);
}
//用两重循环枚举地图中的每一点
for(i=0;i<=n-1;i++)
{
for(j=0;j<=m-1;j++)
{
//首先判断这个点是不是平地,是平地才可以被放置炸弹
if(a[i][j]=='.');
{
sum=0;//sum用来统计消灭敌人的数,所以初始化为0
//将当前坐标i,i复制到两个新变量x,y中,以便向上下左右四个方向分别统计可以消灭的敌人数
// 向上统计可以消灭的敌人数
x=i;y=j;
while(a[x][y]!='#')//判断是不是墙,如果不是墙及继续
{
//如果当前点是敌人,则进行计数
if(a[x][y]=='G')
{
sum++;
}
x--;//继续向上统计
}
//向下统计可以消灭的敌人数
x=i;y=j;
while(a[x][y]!='#')
{
if(a[x][y]=='G')
sum++;
x++;//继续向下统计
}
//向左统计可以消灭的敌人数
x=i;y=j;
while(a[x][y]!='#')
{
if(a[x][y]=='G')
sum++;
y--;//继续向左统计可以消灭的敌人数
}
//向右统计可以消灭的敌人数
x=i;y=j;
while(a[x][y]!='#')
{
if(a[x][y]=='G')
sum++;
y++;//继续向右统计
}
//更新map的值
if(sum>map)
{
//如果当前节点所能消灭的敌人总数大与map,则更新map
map=sum;
//并用p和q记录当前点的坐标
p=i;q=j;
}
}
}
}
printf("将炸弹放置在(%d,%d),最多可以消灭%d个敌人\n",p,q,map);
return 0;
}
炸弹人
最新推荐文章于 2022-07-14 13:57:58 发布