假設我們有一個 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 '#' and grid[i - 1, j - 1] is same as '#' and grid[i - 1, j + 1] is same as '#' and grid[i + 1, j - 1] is same as '#' and grid[i + 1, j + 1] is same as '#', then: (increase count by 1) print(count)
讓我們看下面的實作以便更好地理解−
#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] == '#' && grid[i - 1][j - 1] == '#' && grid[i - 1][j + 1] == '#' && grid[i + 1][j - 1] == '#' && grid[i + 1][j + 1] == '#') count++; } } cout<< count; } int main() { int n = 5; vector<string> grid = {"#...#", ".#.#.", "..#..", ".#.#.", "#...#"}; solve(n, grid); return 0; }
5, {"#...#", ".#.#.", "..#..", ".#.#.", "#...#"}
1
以上是C++程式用於尋找網格中是否存在模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!