兩點(51nod 深搜)

2021-08-29 02:11:21 字數 1283 閱讀 5968

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

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

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

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

k至少是4。

所有的點是同一種顏色。

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

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

input

單組測試資料。

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

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

output

如果有環輸出yes,否則輸出no。

sample input

3 4aaaa

abca

aaaa

3 4aaaa

abca

aada

sample output

yesno

深搜題目,想明白就好了。在搜尋的過程中,不能往回搜尋,搜過的就標記為1,當搜尋的過程中遇見1就返回yes,否則就返回no。

**如下:

#include#include#include#include#includeusing namespace std;

int d[2]=,,,};

char a[51][51];

int n,m;

int flag=0;

int vis[51][51];

void dfs(int x,int y,int xx,int yy)

vis[tx][ty]=1;

dfs(tx,ty,d[i][0],d[i][1]);

if(flag) return ; }}

int main()

{ while(scanf("%d%d",&n,&m)!=eof)

{ flag=0;

memset(vis,0,sizeof(vis));

for(int i=0;i努力加油a啊,(o)/~

51Nod 四點共面

1265 四點共面 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出三維空間上的四個點 點與點的位置均不相同 判斷這4個點是否在同乙個平面內 4點共線也算共面 如果共面,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 ...

51nod1416 搜尋 剪枝 並查集 兩點

中文題意。開始t了一發。後來發現了剪枝。那就是如果再dfs的過程中發現了以前搜尋的點,並且這個點不是當前搜尋點的父親節點,那麼必然已經成環,並且大小至少為4 並查集沒怎麼看懂。補 include include include include const int maxn 51 int m,n in...

51nod1416兩點(dfs或並查集)

福克斯在玩一款手機解迷遊戲,這個遊戲叫做 兩點 基礎級別的時候是在乙個n m單元上玩的。像這樣 每乙個單元有包含乙個有色點。我們將用不同的大寫字母來表示不同的顏色。這個遊戲的關鍵是要找出乙個包含同一顏色的環。看上圖中4個藍點,形成了乙個環。一般的,我們將乙個序列 d 1,d2,d k 看成乙個環,當...