C++中的战舰游戏


假设我们有一个二维棋盘,我们需要计算其中有多少艘战舰。战舰用符号'X'表示,空位用'.'表示。我们可以假设以下规则:

  • 你得到一个有效的棋盘,只由战舰或空位组成。

  • 战舰只能水平或垂直放置。换句话说,它们只能是1xN(1行,N列)或Nx1(N行,1列)的形状,其中N可以是任意大小。

  • 至少一个水平或垂直单元格将两艘战舰隔开——没有相邻的战舰。

因此,如果棋盘如下所示:

X..X
...X
...X

那么输出将是2,因为有两艘战舰。

为了解决这个问题,我们将遵循以下步骤:

  • ans := 0,n := 行数,m := 列数

  • 对于第i行

    • 对于第j列

      • 如果board[i, j]是点,则进入下一轮迭代

      • 如果 i > 0 且 board[i – 1, j] = ‘X’,则进入下一轮迭代

      • 如果 j > 0 且 board[i, j - 1] = ‘X’,则进入下一轮迭代

      • ans 加 1

  • 返回 ans

让我们看看下面的实现,以便更好地理解:

示例

在线演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int countBattleships(vector<vector<char>>& board) {
      int ans = 0;
      int n = board.size();
      int m = board[0].size();
      for(int i = 0; i < n; i++){
         for(int j = 0; j < m; j++){
            if(board[i][j] == '.')continue;
            if(i > 0 && board[i - 1][j] == 'X')continue;
            if(j > 0 && board[i][j - 1] == 'X')continue;
            ans++;
         }
      }
      return ans;
   }
};
main(){
   vector<vector<char>> v = {{'X','.','.','X'},{'.','.','.','X'},{'.','.','.','X'}};
   Solution ob;
   cout << (ob.countBattleships(v));
}

输入

[["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]

输出

2

更新于:2020年4月30日

718 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告