首先,深度優先搜尋與二叉樹遍歷中先序遍歷的原理十分相似,即一直向前走直到盡頭再返回
//偽**描述
void
dfs(
)
一
8皇后問題
這道題有兩種做法(我知道的)
①是利用數字的全排列,求出每一位數字都不同的序列,此時滿足同一行同一列只有乙個皇后,只需判斷斜著有沒有皇后即可,可以利用
)}進行判斷
②標準的dfs操作
用1個陣列bool column[8]
在第 i 列放置皇后標記就標記column[i]=true
用乙個二維陣列判斷斜線bool slash[8][8]
, 標記方式與第一種十分相似
slash[i+t]
[i-t+8]
==true
//每一次使用該皇后都標記
二
單詞接龍
這道題有點坑,沒有把單詞具體怎們接說清楚,比如abab跟abab如果相接的話只要接上最前面那一部分就好,形成ababab
主要是進入是否dfs( ),比較難判斷,我才用的是從後乙個單詞最前面乙個字母開始尋找是否有與前乙個單詞最後乙個字母相同位置,如果有就,用2個標記標記這兩個位置,兩個標記都向前移動直到,後乙個單詞的首字母,然後判斷拼接後後乙個字母的長度,如果為0則繼續尋找,否則返回該長度,最後面找不到就放回0。
在dfs裡面記得回溯
dfs的源**,沒有判斷條件
void
dfs(string words[
],string begin)}}
else}}
if(len>max_len)
return
;}
三
滑雪(記憶化搜尋的應用)
記憶化搜尋是dfs的一種優化,其思想是在每一次dfs時,把結果記住,下一次遇到這個結點直接運用記住的答案,所以這裡的dfs是有返回值的,每一次dfs返回的值就是記住的結果。
#include
#include
using
namespace std;
int r,c,total,temp;
int ice[
105]
[105];
int step[
105]
[105];
int x[4]
=;int y[4]
=;intdfs
(int
,int);
intmain()
}for
(t=0
;tcout<
}int
dfs(
int row,
int column)
}return step[row]
[column]
;}
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...
廣度優先搜尋,深度優先搜尋
深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...
深度優先搜尋 廣度優先搜尋
深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...