原樣題目連線
給乙個 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 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子...