例1. poj 1979 red and black
題意:由@為起點,周圍最多有『 . 』跟它相連通,不能越過『 # 』。@本身也算乙個
輸入輸出
sample input
6 9....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0sample output
4559613
**:
#include
using namespace std;
char map[25][25];
int n,m,num;
int i,j,ii,jj;
int dfs(int x,int y)
if(x<=n&&y<=m)
if(x-1>0&&map[x-1][y]!='#')
if(y+1<=m&&map[x][y+1]!='#')
if(y-1>0&&map[x][y-1]!='#') }
return 1;
}int main()}}
for(j=0;j<=n+1;j++)
for(j=0;j<=m+1;j++)
num=1;
map[ii][jj]='#';
dfs(ii,jj);
cout<
思路:以@為起點上下左右四個方向搜尋,到乙個點計數器加1,把『 . 』改為『 # 』。當走到四周都為『#』時,搜尋結束。
例二: hdu 1010 tempter of the bone
題意:
在一張地圖上,給定起點和終點,問能否恰好在t時刻到達終點
沒有過的**
過的**
思路:dfs+減枝,奇偶剪枝
第乙個剪枝我們可以想到,當剩下的步數大於剩下的時間的時候,狗是不能走到的;
接下來我們來第二個剪枝:
我們把map的奇偶性以01編號:
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
我們發現從0走一步一定走到1,從1走一步一定走到0。
也就是說,如果當前的狗所在的座標與d的座標奇偶性不一樣,那麼狗需要走奇數步。
同理,如果狗所在座標與d的座標奇偶性一樣,那麼狗需要走偶數步數。
也就是說,狗的座標x、y和對2取餘是它的奇偶性,dxy和對2取余是d的奇偶性。
兩個奇偶性一加再對2取餘,拿這個餘數去與剩下時間對2取餘的餘數作比較即可。
深度優先搜尋(一)
深度優先搜尋 dfs 是一種基本的圖演算法,主要針對圖和樹,英文縮寫 dfs。走迷宮 深度優先搜尋的重要例子 走迷宮。用迷宮代替圖,通道代替邊,路口代替定點,那麼我們就可以將迷宮看成是乙個圖。要探索迷宮中的所有通道,我需要這樣做 和dfs思想是一樣的 圖例 題目 迷宮由n行m列的單元格組成,每個單元...
深度優先搜尋(一)
輸入n個數字,輸出這n個陣列的全排列。分析 首先需要乙個資料結構來確定還有哪些資料沒有被排序,因此有了bool陣列is in,然後有乙個陣列用來裝已經被排列的陣列,因此有了陣列bucket。結束條件是當選了n個數字以後,也就是沒有數字可以放入bucket的時候,結束深度優先搜尋。選擇列表就是剩餘未排...
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...