2016 12 10 dfs簡單總結

2021-07-25 11:12:12 字數 1147 閱讀 7202

最近做了很多關於搜尋的題目,今天也是做乙個小總結。

先附上幾道基本題的**:

馬蘭過河卒:在乙個大棋盤上,乙個過河卒在(0,0)的位置上,還有乙隻馬,馬的位置固定的,可以向8個位置走,這些馬可以走的地方都算馬的攻擊範圍內。小卒子不能走到馬的攻擊範圍。(不是卒子一步,馬一步,只有當卒子走進馬一步就可以到的地方馬才可以攻擊)

現在給出馬的位置和卒子的目標點座標,問卒子有幾種方式可以到達目標點。

程式:#include

using namespace std;

int xx[8]=;

int yy[8]=;

int a[100][100];

bool vis[100][100];

int sum,m,n,mx,my;

void dfs(int x,int y)

} int main()

這道題非常簡單,直接檢查下乙個位置能不能走,能走就走,到達終點ans++;

還有兩道非常著名的簡單搜尋題:

八皇后:

根據放皇后的要求,我們可以一行一行的分析。在放置下乙個皇后的時候,檢查上面有沒有重列的,檢查有沒有斜線(檢查斜線的方式非常有意思,可以看看**)。可以用bool陣列一一判斷,也可以現場檢查:

#include

using namespace std;

int geightqueen[8], gcount = 0;

int check(int loop, int value)/

return 1; }

void eight_queen(int index)

eight_queen(index + 1);

geightqueen[index] = 0; }

} }int main()

騎士周遊問題:

網路上有很多版本,我做的是給定棋盤大小,看看環遊有幾種方法。

這道題目看起來嚇人,其實同屬於基礎問題。同樣判斷我要走的下乙個點有沒有走過,如果能走,就把現在的這個點設為「走過」,然後走過去(注意不能超陣列下標)。雖然需要判斷這個位置走沒走過,但是int陣列可以確定這是第幾個走的,更加有用。**網上全是,這道題本身也簡單,在此就不多加贅述。

總之,搜尋是一種高階的列舉方法,主要用遞迴實現,這種**清晰,簡明,還是比較有值得學習的地方的。

dfs簡單總結

介紹 dfs中文名 先深搜尋 說得通俗點就是一搜到底,不撞南牆不回頭 如上圖,dfs搜尋次序為1 2 3到頭之後,回到2,然後到4,此時有兩個方向可走,乙個是3,乙個是5,因為3已搜過,那麼只有搜5了,此時所有節點全部遍歷完。dfs一般用遞迴來實現,格式如下 dfs px 結束條件 for pn 應...

2016 12 10 一)測試總結

第一次寫總結報告。估計沒人會看。先上題目 粗體的是之前沒寫的 買鉛筆 noip2016普及組 題目背景 noip2016 普及組 t1 題目描述 p 老師需要去商店買 n 支鉛筆作為小朋友們參加 noip 的禮物。她發現商店一共有 3 種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,也有可能不同。為了...

紀中2016 12 10比賽總結

100 100 20 0 220 250分也好呀!今天看見比賽標題就有點虛虛的。提高c 呵呵,趕緊看題。t1 分發糖果。一道一看就是規律的題,怒打資料庫 還錯了 後來用乙個判斷質數的方法,後來乙個高明的草稿本推算,發現不通。推了個20以內的東東,出現了 1 2 4 8 16可行。果斷打正解 判斷是不...