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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

两点(51Nod-1416)

發布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两点(51Nod-1416) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

福克斯在玩一款手機解迷游戲,這個游戲叫做”兩點”。基礎級別的時候是在一個n×m單元上玩的。像這樣:

每一個單元有包含一個有色點。我們將用不同的大寫字母來表示不同的顏色。

這個游戲的關鍵是要找出一個包含同一顏色的環。看上圖中4個藍點,形成了一個環。一般的,我們將一個序列 d1,d2,...,dk 看成一個環,當且僅當它符合下列條件時:

1. ? ?這k個點不一樣,即當 i≠j時, di 和 dj不同。

2. ? ?k至少是4。

3. ? ?所有的點是同一種顏色。

4. ? ?對于所有的 1≤i≤k-1: di 和 di+1 是相鄰的。還有 dk 和 d1 也應該相鄰。單元 x 和單元 y 是相鄰的當且僅當他們有公共邊。

當給出一幅格點時,請確定里面是否有環。

輸入

單組測試數據。

第一行包含兩個整數n和m (2≤n,m≤50):板子的行和列。

接下來n行,每行包含一個有m個字母的串,表示當前行每一個點的顏色。每一個字母都是大寫字母。

輸出

如果有環輸出Yes,否則輸出No。

輸入樣例

3 4
AAAA
ABCA
AAAA
3 4
AAAA
ABCA
AADA

輸出樣例

Yes
No

思路:dfs 判環,注意搜索過程中的判斷條件,除了步數要大于等于 4 外,從一個點走到下一個點時,下一個點不能再走回上一個點

源程序

#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD = 1E9+7; const int N = 500+5; const int dx[] = {-1,1,0,0,-1,-1,1,1}; const int dy[] = {0,0,-1,1,-1,1,-1,1}; using namespace std; int n,m; char G[N][N]; bool vis[N][N]; bool flag; void dfs(int x,int y,int prox,int proy,int step){if(flag)return;for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(vis[nx][ny]){if(nx!=prox||ny!=proy){if(step>=4){flag=true;return;}}}if(nx>=0 && nx<n && ny>=0 && ny<m && !vis[nx][ny] && G[nx][ny]==G[x][y] ){vis[nx][ny]=true;dfs(nx,ny,x,y,step+1);vis[nx][ny]=false;}} } int main() {while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<n;i++){getchar();for(int j=0;j<m;j++){char ch;scanf("%c",&ch);G[i][j]=ch;}}flag=false;memset(vis,false,sizeof(vis));for(int i=0;i<n;i++){if(flag)break;for(int j=0;j<m;j++){if(flag)break;if(!vis[i][j]){vis[i][j]=true;dfs(i,j,0,0,1);vis[i][j]=false;}}}if(flag)printf("Yes\n");elseprintf("No\n");}return 0; }

?

總結

以上是生活随笔為你收集整理的两点(51Nod-1416)的全部內容,希望文章能夠幫你解決所遇到的問題。

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