蓝桥杯day7——DFSBFS
文章目錄
- DFS:深度優(yōu)先搜索
- 例題
- BFS: 廣度優(yōu)先搜索
- 例題
- 對(duì)于Python中列表切片的補(bǔ)充
- 總結(jié)
DFS:深度優(yōu)先搜索
回溯練得太多了,今天的兩題思路都很簡(jiǎn)單就不多談了
例題
給定一個(gè)整數(shù) n,將數(shù)字 1~n 排成一排,將會(huì)有很多種排列方法。
現(xiàn)在,請(qǐng)你按照字典序?qū)⑺械呐帕蟹椒ㄝ敵觥?/p>
輸入格式
共一行,包含一個(gè)整數(shù) n。
輸出格式
按字典序輸出所有排列方案,每個(gè)方案占一行。
數(shù)據(jù)范圍
1≤n≤7
輸入樣例:
3
輸出樣例:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
值得注意的兩點(diǎn)是
回溯過程添加結(jié)果集,要用深拷貝
used數(shù)組False代表在樹枝層面,代表沒用過,True代表用過, 在樹層層面,False代表在同一樹層用過該元素
n? 皇后問題是指將 n 個(gè)皇后放在 n×n 的國(guó)際象棋棋盤上,使得皇后不能相互攻擊到,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上。
現(xiàn)在給定整數(shù) n,請(qǐng)你輸出所有的滿足條件的棋子擺法。
輸入格式
共一行,包含整數(shù) n。
輸出格式
每個(gè)解決方案占 n 行,每行輸出一個(gè)長(zhǎng)度為 n 的字符串,用來表示完整的棋盤狀態(tài)。
其中 . 表示某一個(gè)位置的方格狀態(tài)為空,Q 表示某一個(gè)位置的方格上擺著皇后。
每個(gè)方案輸出完成后,輸出一個(gè)空行。
注意:行末不能有多余空格。
輸出方案的順序任意,只要不重復(fù)且沒有遺漏即可。
數(shù)據(jù)范圍
1≤n≤9
輸入樣例:
4
輸出樣例:
.Q…
…Q
Q…
…Q.
…Q.
Q…
…Q
.Q…
本題樹結(jié)構(gòu):深度是行,寬度是列
BFS: 廣度優(yōu)先搜索
例題
給定一個(gè) n×m 的二維整數(shù)數(shù)組,用來表示一個(gè)迷宮,數(shù)組中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通過的墻壁。
最初,有一個(gè)人位于左上角 (1,1) 處,已知該人每次可以向上、下、左、右任意一個(gè)方向移動(dòng)一個(gè)位置。
請(qǐng)問,該人從左上角移動(dòng)至右下角 (n,m) 處,至少需要移動(dòng)多少次。
數(shù)據(jù)保證 (1,1) 處和 (n,m) 處的數(shù)字為 0,且一定至少存在一條通路。
輸入格式
第一行包含兩個(gè)整數(shù) n 和 m。
接下來 n 行,每行包含 m 個(gè)整數(shù)(0 或 1),表示完整的二維數(shù)組迷宮。
輸出格式
輸出一個(gè)整數(shù),表示從左上角移動(dòng)至右下角的最少移動(dòng)次數(shù)。
數(shù)據(jù)范圍
1≤n,m≤100
輸入樣例:
5 5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
輸出樣例:
8
collections模塊下的deque方法,push == appendleft, pop == pop
對(duì)于遍歷來說可以通過坐標(biāo)來記錄是否遍歷過,矩陣類的圖用[x, y]來確定遍歷的位置,尤其是那些通過上下左右操作的
在一個(gè) 3×3 的網(wǎng)格中,1~8 這 8 個(gè)數(shù)字和一個(gè) x 恰好不重不漏地分布在這 3×3 的網(wǎng)格中。
例如:
1 2 3
x 4 6
7 5 8
在游戲過程中,可以把 x 與其上、下、左、右四個(gè)方向之一的數(shù)字交換(如果存在)。
我們的目的是通過交換,使得網(wǎng)格變?yōu)槿缦屡帕?#xff08;稱為正確排列):
1 2 3
4 5 6
7 8 x
例如,示例中圖形就可以通過讓 x 先后與右、下、右三個(gè)方向的數(shù)字交換成功得到正確排列。
交換過程如下:
1 2 3 1 2 3 1 2 3 1 2 3
x 4 6 4 x 6 4 5 6 4 5 6
7 5 8 7 5 8 7 x 8 7 8 x
現(xiàn)在,給你一個(gè)初始網(wǎng)格,請(qǐng)你求出得到正確排列至少需要進(jìn)行多少次交換。
輸入格式
輸入占一行,將 3×3 的初始網(wǎng)格描繪出來。
例如,如果初始網(wǎng)格如下所示:
1 2 3
x 4 6
7 5 8
則輸入為:1 2 3 x 4 6 7 5 8
輸出格式
輸出占一行,包含一個(gè)整數(shù),表示最少交換次數(shù)。
如果不存在解決方案,則輸出 ?1。
輸入樣例:
2 3 4 1 5 x 7 6 8
輸出樣例
19
注意的點(diǎn):Python中字典的鍵不能為列表,字符串是不可以改變的
通過字典記錄狀態(tài)
對(duì)于Python中列表切片的補(bǔ)充
一個(gè)完整的切片表達(dá)式包含兩個(gè)“:”,用于分隔三個(gè)參數(shù)(start_index、end_index、step)。當(dāng)只有一個(gè)“:”時(shí),默認(rèn)第三個(gè)參數(shù)step=1;當(dāng)一個(gè)“:”也沒有時(shí),start_index=end_index,表示切取start_index指定的那個(gè)元素。
切片操作基本表達(dá)式:object[start_index:end_index:step]
step:正負(fù)數(shù)均可,其絕對(duì)值大小決定了切取數(shù)據(jù)時(shí)的‘‘步長(zhǎng)”,而正負(fù)號(hào)決定了“切取方向”,正表示“從左往右”取值,負(fù)表示“從右往左”取值。當(dāng)step省略時(shí),默認(rèn)為1,即從左往右以步長(zhǎng)1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情說三遍!
start_index:表示起始索引(包含該索引對(duì)應(yīng)值);該參數(shù)省略時(shí),表示從對(duì)象“端點(diǎn)”開始取值,至于是從“起點(diǎn)”還是從“終點(diǎn)”開始,則由step參數(shù)的正負(fù)決定,step為正從“起點(diǎn)”開始,為負(fù)從“終點(diǎn)”開始。
end_index:表示終止索引(不包含該索引對(duì)應(yīng)值);該參數(shù)省略時(shí),表示一直取到數(shù)據(jù)“端點(diǎn)”,至于是到“起點(diǎn)”還是到“終點(diǎn)”,同樣由step參數(shù)的正負(fù)決定,step為正時(shí)直到“終點(diǎn)”,為負(fù)時(shí)直到“起點(diǎn)”。
總結(jié)
今天大二學(xué)年的綜測(cè)出來了,說實(shí)話挺慌的,看到我所處的位置,真是搖搖欲墜啊,績(jī)點(diǎn)不穩(wěn)且沒有競(jìng)賽,菜菜子。
不過這些都急不來,今天看到好多人保研結(jié)果我真是羨慕啊,也期望自己能保到理想的學(xué)校。
我們要加油,一步一個(gè)腳印,無論結(jié)果如何,千萬別焦慮,別難過,我們都有自己的路要走,加油吧!菜鳥。
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯day7——DFSBFS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老年公寓管理系统
- 下一篇: shiro权限管理的应用