搜尋 bfs,dfs 專題1 八皇后型別

2021-10-23 05:39:12 字數 3232 閱讀 2763

模板

1判斷邊界

2剪枝3嘗試放入並判斷,

4標記,最後回溯 (3 4兩步可以調換)

#include

using

namespace std;

int a[

10000000]=

;int n;

int tot=0;

void

search

(int cur)

cout<

}return;}

else

for(

int i=

0;iif(ok)

search

(cur+1)

;//如果合法,則遞迴 }}

intmain()

奇怪的電梯

#include

using

namespace std;

int r[

100000]=

;int s[

100000]=

;int n,a,b;

int sum=

100000000

;void

dfs(

int cur,

int click)

if(cur>b||cur<1)

return;if

(click>sum)

return

;//剪枝

r[cur]=1

;//標記,像此類操作少的,可以統一進行標記回溯.

if(cur+s[cur]

<=n&&

!r[cur+s[cur]])

dfs(cur+s[cur]

,click+1)

;if(cur-s[cur]

>=1&&

!r[cur-s[cur]])

dfs(cur-s[cur]

,click+1)

; r[cur]=0

;//回溯

}int

main()

else cout<<

"-1"

;}

bfs版本:

#include

using

namespace std;

struct node

node()

:cur(0

),step(0

)};queue q;

int n,a,b;

int s[

1000000]=

;int vis[

1000000]=

;node t;

intmain()

if(t.cur+s[t.cur]

<=b&&

!vis[t.cur+s[t.cur]])

if(t.cur-s[t.cur]

>=1&&

!vis[t.cur-s[t.cur]])

}if(t.cur==b)cout<

else cout<<

"-1";}

/*總結bfs:

1壓入隊頭

2取隊頭

3判斷4遍歷壓入,標記vis

//無重疊部分,返回0

}void

solve

(string strnow,

int lengthnow,

int cur)}}

main()

選數字

#include

using

namespace std;

int n,k;

int a[

1000000]=

;int vis[

100000]=

;int sum=0;

void

dfs(

long

long

int l,

int cur,

int cnt)}if

(l==i)

return;}

if(cur>k)

return

;//剪枝

for(

int i=cnt;i

}int

main()

考前臨時抱佛jiao

#include

using

namespace std;

int a[4]

[25]=

;int s[4]

=;int m,ans=0;

int l,r;

void

dfs(

int x,

int y)

//嘗試往左右腦放題目;

l+=a[x]

[y];

dfs(x,y+1)

; l-

=a[x]

[y];

r+=a[x]

[y];

dfs(x,y+1)

; r-

=a[x]

[y];

}int

main()

}for

(int i=

0;i<

4;i++

) cout<

}

搜尋 bfs,dfs 專題3 迷宮問題

include using namespace std int n,m,t int a 100 1000 int vis 100 1000 int x,y,x2,y2 int sum 0 int dx 4 打表 int dy 4 打表 void dfs int l,int r vis l r 1 d...

八皇后 搜尋

檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...

搜尋練習題(1)八皇后

檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...