#include<iostream>
using namespace std;
int main(){
char a[21][21];//用来存储地图,假设这里的地图大小不超过20*20
int i,j,sum,map=0,p,q,x,y,n,m;
cout<<"请输入n和m,n为行,m为列:"<<endl;
cin>>n>>m;
//读入迷宫
cout<<"请输入迷宫矩阵:"<<endl;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>a[i][j];
}
}
//用两重循环枚举地图中的每一点
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
//首先判断这个点是不是平地,是平地才可以被放置炸弹
if(a[i][j]=='.'){
sum=0;//sum用来计数(可以消灭的敌人数),所以需要初始化为0
//将坐标i,j复制到两个新变量x,y中,以便之后向上下左右4个方向统计可以消灭的敌人数
//向上统计可以消灭的敌人数
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;
}
}
}
}
//最后输出这个点和最多可以消灭的敌人总数
cout<<endl<<"将炸弹放置在("<<p<<","<<q<<")处可以消灭"<<map<<"个敌人";
getchar();
return 0;
}
3.2炸弹人
最新推荐文章于 2017-04-26 14:30:27 发布