参考书籍《啊哈,算法》,很有意思的一本算法书,小白也可以看懂,详细见书,这里只提供代码和运行结果。
这里用到的是枚举思想,还有更好地搜索做法。
如果大家有看不懂的地方或提出建议,欢迎评论区留言。
#include<iostream>
using namespace std;
int main()
{
char a[20][21];//建立一个二维字符数组,表示x行y列
int i, j, sum, max = 0;
int p, q, x, y, n, m;
cout << "请输入行数和列数: ";
cin >> n >> m;//输入行数和列数
for (i = 0; i <n ; i++)
{
for (j = 0; j < m; j++)
{
cin >> a[i][j];//输入题目信息
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; 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;//记录该点坐标
}
}
}
}
cout<<"放置炸弹位置在:" << p << q << endl;
cout << max;
}