SDUTOJ3469_深度优先搜索练习之神奇的矩环(DFS)
深度優先搜索練習之神奇的矩環
Time Limit:?1000 ms?Memory Limit:?65536 KiB
Submit?Statistic
Problem Description
小鑫的女朋友被魔王搶走了!
魔王留給小鑫一張n*m大的表,上面有各種各樣的顏色,用A-Z這26個字母來表示。魔王留給他一個任務,如果小鑫可以在這張表中找出任意一個長度大于1的環,并且這個環的顏色是相同的,魔王就把小鑫的女朋友還給他。為了從魔王手中奪回他的女朋友,小鑫請你幫忙,你能幫幫他嗎?
Input
多組輸入。
每組的第一行有兩個整數n,m。代表表的大小。
接下來是由A-Z的一些字母所構成的n行m列的表。
1<=n,m<=200
Output
如果可以救回他的女朋友,輸出Yes,否則輸出No
Sample Input
4 7 ABCBBAA BCBCBCB AABBCCA ACCCBBB 10 3 AAC ABB BBA AAC CBC CCA CBB CCA CCB BAASample Output
No YesHint
?
Source
這個題參考學長思路? 寫下存檔:https://blog.csdn.net/m0_37624640/article/details/77102310
dfs這種算法的理解:學長畫了兩張圖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? 其實這個算法就是從源點出發,搜索它的四個方向即上,下,左,右。若能找到與其顏色相同的點,那么他們之間就連通。然后在DFS,直到找到第四個頂點時,若能形成環,那么第四個頂點一定和源點之間有“邊”,這時候另標記變量flag=1,返回。我算了一下,有八種形成環的走法,每個環有四個點,那么這四個點都可以當做源點,即最終和第四個頂點連通的一定是源點。那么就是4種走法。順時針4種,逆時針4種,即8種。
----------------------------------------------------------------------------------------------------------------
/*模仿別人代碼*/ #include <bits/stdc++.h> using namespace std; char gra[222][222]; int cat[222][222]; int n, m, flag; void dfs(int x, int y, int i, int j) {cat[x][y] = 1;if (flag)return;if (x - 1 >= 0 && gra[x - 1][y] == gra[x][y]){if (cat[x - 1][y] && ((x - 1 != i) || (y != j)))flag = 1;else if (!cat[x - 1][y])dfs(x - 1, y, x, y);}if (x + 1 < n && gra[x + 1][y] == gra[x][y]){if (cat[x + 1][y] && ((x + 1 != i) || (y != j)))flag = 1;else if (!cat[x + 1][y])dfs(x + 1, y, x, y);}if (y - 1 >= 0 && gra[x][y - 1] == gra[x][y]){if (cat[x][y - 1] && ((x != i) || (y - 1 != j)))flag = 1;else if (!cat[x][y - 1])dfs(x, y - 1, x, y);}if (y + 1 < m && gra[x][y + 1] == gra[x][y]){if (cat[x][y + 1] && ((x != i) || (y + 1 != j)))flag = 1;else if (!cat[x][y + 1])dfs(x, y + 1, x, y);} } int main() {ios::sync_with_stdio(false);while (cin >> n >> m){memset(cat, 0, sizeof(cat));flag = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++)cin >> gra[i][j];}for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (!cat[i][j])dfs(i, j, i, j);if (flag)break;}if (flag)break;}if (flag)cout << "Yes" << endl;elsecout << "No" << endl;}return 0; }?
轉載于:https://www.cnblogs.com/iQXQZX/p/10258735.html
總結
以上是生活随笔為你收集整理的SDUTOJ3469_深度优先搜索练习之神奇的矩环(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [人工智能-综述-6]:为什么说,系统的
- 下一篇: Veebot-自动静脉抽血机器人