本文共 1344 字,大约阅读时间需要 4 分钟。
1 /* 2 DFS:每个点四处寻找,判断是否与前面的颜色相同,当走到已走过的表示成一个环 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 using namespace std;14 15 const int MAXN = 1e6 + 10;16 const int INF = 0x3f3f3f3f;17 int dx[4] = { 1, -1, 0, 0};18 int dy[4] = { 0, 0, 1, -1};19 char a[55][55];20 int used[55][55];21 int n, m;22 23 bool DFS(int x, int y, int px, int py, char ch)24 {25 used[x][y] = 1;26 for (int i=0; i<=4-1; ++i)27 {28 int tx = x + dx[i];29 int ty = y + dy[i];30 if (tx == px && ty == py) continue;31 if (tx >= 0 && tx <= n-1 && ty >= 0 && ty <=m-1 && a[tx][ty] == ch)32 {33 if (used[tx][ty]) return true;34 if (DFS (tx, ty, x, y, ch)) return true;35 }36 }37 38 return false;39 }40 41 int main(void)42 {43 //freopen ("B.in", "r", stdin);44 45 while (cin >> n >> m)46 {47 memset (used, 0, sizeof (used));48 for (int i=0; i<=n-1; ++i)49 {50 scanf ("%s", &a[i]);51 }52 53 bool flag = false;54 for (int i=0; i<=n-1; ++i)55 {56 for (int j=0; j<=m-1; ++j)57 {58 if (!used[i][j])59 {60 if (DFS (i, j, -1, -1, a[i][j]))61 {62 puts ("Yes"); flag = true; break;63 }64 }65 }66 if (flag) break;67 }68 69 if (!flag) puts ("No");70 }71 72 return 0;73 }
转载于:https://www.cnblogs.com/Running-Time/p/4366706.html