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 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告