Problem Description
放置一枚炸弹,找出能消灭最多敌人的点,炸弹不能穿墙,其中墙用#表示,敌人用G表示,空地用.表示,当然炸弹只能放在空地上。
Input
输入第一行两个整数m,n(0<m,n<20),然后是m行和n列,假设最少能消灭1个敌人。
Output
输出炸弹放置的位置和最多消灭的敌人数,格式如样例。
Sample Input
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#
#############
Sample Output
(9,9) 8
程序代码:
#include<stdio.h>int main()
{
char a[25][25];
int i,j,m,n,x,y,p,q,sum,max=0;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
scanf("%s",a[i]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i][j]=='.')
{
sum=0;
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++;
}
if(sum>max)
{
max=sum;
p=i;
q=j;
}
}
printf("(%d,%d) %d\n",p,q,max);
return 0;
}