寬度優先搜尋

2021-10-06 08:17:14 字數 4200 閱讀 2590

#include

using

namespace std;

const

int n =

700;

const

int inf =

0x3f3f3f3f

;int dir[10]

=;int n,a,b,ans =

1000000

,flag =0;

int floor[n]

;struct node

;int

check

(node tmp)

void

bfs(

int x)}}

}}intmain()

#include

#define ms(a,b) memset(a,b,sizeof(a))

#define ll long long

//這題記憶化bfs-ac

//其他做法: dfs tarjan-強連通分量

using

namespace std;

const

int n =

1010

;int res[n]

[n];

char ans[n]

[n];

bool vis[n]

[n];

int n,m,x,y;

int dir[

2]=,

,,};

struct node

;queueq,p;

intis_valid

(node tmp)

void

bfs(

int x,

int y)}}

while

(!p.

empty()

)}intmain()

return0;

}

#include

using

namespace std;

const

int n =

200;

//一定要注意把 n 開的大一點 血的教訓 起碼3h浪費這上面

//方法1 找到圈圈裡面的乙個點 然後就可以染色圈內所有點 ac

//方法2 先全部變成2 然後搜尋外圍變成0 前提是要多圍出一圈0 方便搜尋

struct node

;int dir[

2]=,

,,};

int n,x,y,flag =1;

int table[n]

[n];

intcheck

(node tmp)

void

bfs(

int x,

int y)}}

}int

main()

}}bfs(x,y);

cout

int i =

1;i <= n;i++

)//cout}

#include

#define fast ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);

using

namespace std;

const

int n =

1500

;char ans[n]

[n];

bool vis[n]

[n];

int n,m;

int cnt;

int dir[

2]=,

,,};

struct node

;int

is_valid

(node tmp)

intcheck

(int x,

int y,

int xx,

int yy)

intbfs

(int x,

int y)}}

cnt++;if

(!check

(fx,fy,sx,sy)

)return1;

}int

main()

#include

#define fast ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);

#define ms(a,b) memset(a,b,sizeof(a))

#define mp make_pair

#define rush() int t;cin>>t;while(t--)

#define ll long long

using

namespace std;

const

int n =

1e5+

100;

int ans[

510]

[510

],res[

510]

[510];

bool vis[

510]

[510];

int n,m,a,b;

int dir[

2]=,

,,};

inline

intreadint()

//快讀

struct node

;struct anksource[n]

,lord[n]

;queueq;

intis_valid

(node tmp)

void

bfs(

int x,

int y)}}

}int

main()

//cin>>>>source[i].y;

for(

int i =

1;i <= b;i++

)for

(int i =

1;i <= a;i++

)bfs

(source[i]

.x,source[i]

.y);

for(

int i =

1;i <= b;i++

)return0;

}

注意點:方向陣列初始化不能用小括號!!!

#include

using

namespace std;

const

int n =

500;

int ans[n]

[n];

int n,m,x,y;

int dir[

2]=,

,,,,

,,};

//奇怪!!!!!

//為什麼一定要用中括號括起來

struct node

;int

is_valid

(node tmp)

void

bfs(

int x,

int y,

int step)}}

}int

main()

return0;

}

#include

using

namespace std;

const

int n =

1000

;//提前讀取 * 的個數 在最外圍建立額外 0 圈 方便bfs

struct node

;int dir[

2]=,

,,};

int n,m,cnt =

0,num_star =

0,ans;

int x,y;

char table[n]

[n];

intcheck

(node tmp)

void

bfs(

int x,

int y)}}

}int

main()

bfs(0,

0);

ans =

(n +2)

*(m +2)

- num_star - cnt;

cout

}

寬度優先搜尋

寬度優先搜尋演算法 又稱廣度優先搜尋 是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...

寬度優先搜尋

寬度優先搜尋也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pair p char maze max n max m 1 表示迷宮的字串陣列 in...

深度優先搜尋與寬度優先搜尋

深度優先搜尋類似於樹的先序遍歷,從每個頂點開始深度優先遍歷,對該分支路徑深入遍歷到不能再深入為止,返回上層,若上一層有新的分支路徑,繼續遍歷該分支,直到所有點都被訪問 1 訪問該頂點,並標記為已訪問 2 if 該頂點的連線點未被訪問過 遞迴呼叫dfs 3 重複 2 直到該頂點的所有連線點都被訪問 t...