51nod 棋盤行走 深度優先搜尋

2021-09-29 00:26:59 字數 2616 閱讀 2797

原樣題目連線

給乙個 n*m 的棋盤, 棋盤每個格仔顏色都是乙個大寫字母,

以乙個格仔為起點, 每次只能走上下左右四個方向, 並且每個格仔只能走一次,

要求 :

至少經過四個顏色相同的不同格仔最終走回起點

若可以輸出 yes, 否則 no.

直接 dfs, 一直忘記回溯起點, wa到蹦! 唉…

後來考慮了下, 的確完全沒必要用乙個陣列來只標記乙個起點, 實在是非常浪費,

完全可以用 vis[i][j] = -1 來標記起點,

再或者用兩個變數記錄起點橫縱座標, 在遞迴出口的時候判斷下即可 …

不過為了強迫症式的整潔, 我就不改了 ^ _ ^

就當複習了 dfs 了吧, 順便用一用 get 到的新技能, 不用方向陣列來列舉方向, emm, 很巧妙啊, 見方向遍歷方式二

#include

using

namespace std;

const

int maxn =55;

int n, m;

char a[maxn]

[maxn]

;bool vis[maxn]

[maxn]

;bool isstratpos[maxn]

[maxn]

;bool ans =

false

;int nxt[4]

[2]=

,,,}

;void dfs (

char ch,

int x,

int y,

int len )

if( tx>=n || tx<

0|| ty>=m || ty<

0|| vis[tx]

[ty]

|| ch!=a[tx]

[ty]

)continue

; vis[tx]

[ty]

=true

; dfs ( ch, tx, ty, len+1)

; vis[tx]

[ty]

=false;}

}int main ()if

( ans )

break;}

cout <<

( ans ?

"yes"

:"no"

)<< endl;

return0;

}

#include

using

namespace std;

const

int maxn =55;

int n, m;

char a[maxn]

[maxn]

;bool vis[maxn]

[maxn]

;bool isstratpos[maxn]

[maxn]

;bool ans =

false

;void dfs (

char ch,

int x,

int y,

int len )

if( tx>=n || tx<

0|| ty>=m || ty<

0|| vis[tx]

[ty]

|| ch!=a[tx]

[ty]

)continue

; vis[tx]

[ty]

=true

; dfs ( ch, tx, ty, len+1)

; vis[tx]

[ty]

=false;}

}}int main ()if

( ans )

break;}

cout <<

( ans ?

"yes"

:"no"

)<< endl;

return0;

}

小biu在玩乙個棋盤遊戲,這個遊戲給出乙個n*m的棋盤,並且每個點上有乙個棋子,棋子的顏色用乙個大寫字母表示。

小biu獲得遊戲勝利的條件是:

1.選擇乙個棋子作為起點。

2.每次只能走上下左右四個方格,並且下一步方格的顏色要與當前格顏色相同

3.每個塊只能經過一次,要經過不少於4個不同的格仔而且最終要走回起點。

問小biu是否可以贏得遊戲的勝利

輸入第一行包含兩個整數n和m (2≤n,m≤50):棋盤的行和列。

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

輸出如果小biu可以獲得勝利輸出yes,否則輸出no。

資料範圍

對於20%的資料,n *m<=10;

對於65%的資料,n *m<=100;

對於100%的資料, n *m<=2500;

輸入樣例

3 4

aaaa

abca

aaaa

輸出樣例

yes
樣例解釋

樣例中所有的』a』形成乙個環。

51nod 牛奶 bfs深度優先搜尋

農民約翰有三個容量分別是 a,b,c 公升的桶,a,b,c 分別是三個從1到20的整數。最初,a 和 b 桶都是空的,而 c 桶是裝滿牛奶的。有時,農民把牛奶從乙個桶倒到另乙個桶中,直到被灌的桶裝滿或原桶空了。灌注的過程中牛奶不會灑出來。找出當 a 桶是空的時候,c 桶中牛奶所剩量的所有可能性。輸入...

優先佇列 51Nod逛街

比較好的一道題,我們定義三個堆,q1,q2,q3,前兩個堆維護的要去的商店,q3維護的是不去的商店。當q1中的數量大於k之後我們就可以討論q2和q3了,如果我們q2中有的時間大於q3的時間那麼就可以交換,以便騰出更多的時間來逛更多的商店。include define int long long de...

51Nod 消滅兔子 (優先佇列)

消滅兔子 李陶冶 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 40 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子...