题目:给出一个20*20以内的地图,里面会有墙,敌人,平地,要求是找到最合适的放炸弹的位置,并且能够杀死对应行列的敌人,有墙壁的话就会截止
#include <stdio.h> int main() { char a[20][21]; //定义地图的长度不会超过20*20的 int n,m,i,j,sum,max=0,p,q,x,y; scanf("%d%d",&n,&m); //n - 行数 m-列数 //开始读入n行字符地图 for(i=0;i<n;i++) scanf("%s",a[i]); //进行遍历地图 for(i=0;i<n;i++) for(j=0;j<m;j++) { //1.1 首先判断这个点是不是平地 if(a[i][j] == '.') { //1.2 是的话... //2.1 进行不停上下左右遍历 sum=0; //2.2 设置x,y作为i,j不停往一个位置的遍历 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++; } //1.3 是的话进行查找每个点能够击杀的最多人次sum,并且保存i,j的坐标 用p和q来保存 if(sum>max){ max = sum; p = i,q = j; } }//if }//for printf("找到能够消灭最大点的位置(%d,%d),能够消灭%d人",p,q,max); return 0; }
给出实例:
13 13 ############# #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# #############
运行结果:
