参考书籍《啊哈,算法》,很有意思的一本算法书,小白也可以看懂,详细见书,这里只提供代码和运行结果。
这里用到的是枚举思想,还有更好地搜索做法。
如果大家有看不懂的地方或提出建议,欢迎评论区留言。
#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;}