日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SDUTOJ3469_深度优先搜索练习之神奇的矩环(DFS)

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 BAA

Sample Output

No Yes

Hint

?

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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。