#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...