首頁 > 後端開發 > C++ > C++程式用於尋找網格中是否存在模式

C++程式用於尋找網格中是否存在模式

PHPz
發布: 2023-09-05 18:05:06
轉載
836 人瀏覽過

C++程式用於尋找網格中是否存在模式

假設我們有一個 n * n 的網格。我們需要偵測網格中是否存在十字形的模式,如下所示 −

#...#
.#.#.
..#..
.#.#.
#...#
登入後複製

網格只能包含 '#' 和 '.'。我們需要檢測模式並找出有多少個這樣的 模式在網格中。網格和維度作為輸入給我們。

問題類別

程式設計中的各種問題可以透過不同的技術來解決。要解決一個問題,我們首先必須設計一個演算法,並且要詳細研究特定的問題。如果同一個問題反覆出現,可以使用遞歸方法;另外,我們也可以使用迭代結構。控制語句如if-else和switch case可以用來控製程式中的邏輯流程。有效地使用變數和資料結構可以提供更簡單的解決方案和一個輕量級、低記憶體需求的程式。我們必須研究現有的程式技術,如分而治之、貪婪程式設計、動態規劃,並找出它們是否可以使用。這個問題可以透過一些基本的邏輯或蠻力方法來解決。請按照以下內容來更好地理解這種方法。

所以,如果我們的問題輸入是n = 5,網格為

#...#
.#.#.
..#..
.#.#.
#...#,
登入後複製

然後輸出將為1。

步驟

為了解決這個問題,我們將按照以下步驟進行:

count := 0
for initialize i := 1, when i < n - 1, update (increase i by 1), do:
   for initialize j := 1, when j < n - 1, update (increase j by 1), do:
      if grid[i, j] is same as &#39;#&#39; and grid[i - 1, j - 1] is same as &#39;#&#39; and grid[i - 1, j + 1] is same as &#39;#&#39; and grid[i + 1, j - 1] is same as &#39;#&#39; and grid[i + 1, j + 1] is same as &#39;#&#39;, then:
         (increase count by 1)
print(count)
登入後複製

Example

讓我們看下面的實作以便更好地理解−

#include<bits/stdc++.h>
using namespace std;
void solve(int n, vector<string> grid) {
   int count = 0;
   for(int i = 1; i < n - 1; i++){
      for(int j = 1; j < n - 1; j++){
         if(grid[i][j] == &#39;#&#39; && grid[i - 1][j - 1] == &#39;#&#39; && grid[i - 1][j + 1] == &#39;#&#39; && grid[i + 1][j - 1] == &#39;#&#39; && grid[i + 1][j + 1] == &#39;#&#39;)
            count++;
      }
   }
   cout<< count;
}
int main() {
   int n = 5;
   vector<string> grid = {"#...#", ".#.#.", "..#..", ".#.#.", "#...#"};
   solve(n, grid);
   return 0;
}
登入後複製

輸入

5, {"#...#", ".#.#.", "..#..", ".#.#.", "#...#"}
登入後複製

輸出

1
登入後複製

以上是C++程式用於尋找網格中是否存在模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板