C ++板上的战舰

假设我们有一个2D板,我们必须计算其中有多少艘战舰。战列舰用符号“ X”表示,空槽用“。”表示。我们可以假设这些规则-

  • 您会收到一个仅由战舰或空插槽组成的有效木板。

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

  • 两艘战列舰之间至少有一个水平或垂直的舱室分隔开-没有相邻的战列舰。

因此,如果董事会是这样的:

XX
X
X

然后输出将为2,因为有两艘战舰。

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

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

  • 对于第i行

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

    • 如果i> 0并且board [i – 1,j] ='X',则进行下一次迭代

    • 如果j> 0并且board [i,j-1] ='X',则进行下一次迭代

    • 将ans增加1

    • 对于第j列

    • 返回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