題目:給出一個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#
#############
運行結果: