मान लीजिए हमारे पास एक 2D बोर्ड है, तो हमें गिनना होगा कि उसमें कितने युद्धपोत हैं। युद्धपोतों को 'X' प्रतीक के साथ दर्शाया जाता है, खाली स्लॉट को '.' से दर्शाया जाता है। हम इन नियमों को मान सकते हैं -
-
आपको एक मान्य बोर्ड मिलता है, जो केवल युद्धपोतों या खाली स्लॉट से बना होता है।
-
युद्धपोतों को केवल क्षैतिज या लंबवत रखा जा सकता है। दूसरे शब्दों में, वे केवल 1xN (1 पंक्ति, N स्तंभ) या Nx1 (N पंक्तियाँ, 1 स्तंभ) के आकार से बने हो सकते हैं, जहाँ N किसी भी आकार का हो सकता है।
-
दो युद्धपोतों के बीच कम से कम एक क्षैतिज या लंबवत सेल अलग होता है - कोई आसन्न युद्धपोत नहीं हैं।
तो अगर बोर्ड ऐसा है:
X | . | . | X |
. | . | . | X |
. | . | . | X |
तब आउटपुट 2 होगा, क्योंकि दो युद्धपोत हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उत्तर:=0, एन:=पंक्ति गणना और एम:=कॉलम गणना
-
छठी पंक्ति के लिए
-
jth कॉलम के लिए
-
अगर बोर्ड [i, j] डॉट है, तो अगले पुनरावृत्ति के लिए जाएं
-
अगर मैं> 0 और बोर्ड[i - 1, j] ='X', तो अगले पुनरावृत्ति के लिए जाएं
-
अगर j> 0 और बोर्ड[i, j-1] ='X', तो अगले पुनरावृत्ति के लिए जाएं
-
1 तक बढ़ाएँ
-
-
-
वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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