其實這個才是我做 kuangbin 帶你飛專題訓練的第乙個專題,只不過是在做完了 最短路 之後才想起來可以寫個部落格記錄一下。寫完最短路之後,就順便把 簡單搜尋補上了…
簡單搜尋專題,基本上只用到了 dfs 和 bfs,因此以下主要介紹 dfs 和 bfs,然後針對具體的題目給出**。
經典例題 hdu 1241 oil deposits
解題思路:這道題就是用 dfs 遍歷以某乙個標記為 『@』 位置為起點的周圍所有 『@』 標記的區域,遍歷過後將 『@』 標記變為 『#』,』@』 區域的個數就是起點的個數。
#include
#include
using
namespace
std;
intconst maxn = 110;
int mov[2] = ,,,,,,,};
int m, n;
char grid[maxn][maxn];
void dfs(int , int);
int main()
}printf("%d\n", t);
}return0;}
void dfs(int x, int y)
}
廣度優先搜尋也是搜尋的手段之一,它與深度優先搜尋類似,從某個狀態出發搜尋所有可以到達的狀態。
與深度優先搜尋不同的是搜尋的順序,廣度優先搜尋總是先搜尋距離初始狀態近的狀態。也就是說,他按照 開始狀態 -> 只需一次轉移就可以到達的所有狀態 -> 只需兩次轉移就可以到達的所有狀態 -> …
對於同乙個狀態,廣度優先搜尋之經過一次,因此複雜度為 o(狀態數 × 轉移的方式)。
經典例題 poj 2251 : dungeon master
解題思路:這道題就是用普通的 bfs,只不過是將節點拓展的方式變成了 6 個方向:上、下、東、西、南、北
#include
#include
#include
#include
#define max_sz 32
#define move 6
using
namespace
std;
struct node;
};int bfs();
char dungeon[max_sz][max_sz][max_sz];
int d[max_sz][max_sz][max_sz];
int dl = ;
int dr = ;
int dc = ;
int l, r, c;
int stat_l, stat_r, stat_c;
int end_l, end_r, end_c;
int main()
if (dungeon[i][j][k] == 'e')
d[i][j][k] = int_max;}}
}int result = bfs();
if (result == 0)
else
printf("escaped in %d minute(s).\n", result);
}return0;}
int bfs()}}
return
0;}
有的題目會要求輸出路徑,這個時候一般需要用乙個結構體陣列來儲存狀態資訊,比如說可以儲存到初始狀態的距離和當前狀態的前乙個狀態。最後再用 dfs 來遍歷一遍這個陣列,將路徑輸出。
經典例題 poj 3984 迷宮問題
#include
#include
#include
using
namespace
std;
typedef pair p;
struct nodepath[5][5];
int maze[5][5];
int route[2] = , , , };
void dfs(int x, int y)
dfs(path[x][y].px, path[x][y].py);
printf("(%d, %d)\n", x, y);
}void bfs()
}}int main()
memset(path, -1, sizeof(path));
bfs();
return
0;}
演算法筆記 簡單程式設計訓練
codeup 1934 找x 當然也可利用 i n 判斷是否有x存在 includeint main int n,j 1 scanf d n for int i 0 i n i int x scanf d x for int i 0 i n i if j 1 return 0 pat b1036 跟...
演算法訓練 二叉搜尋樹
root根節點 cnt 二叉樹大小 sequence 給定的序列 intinsert int v,int x if v t x val else if t x val v return x 返回根節點,根節點不會再發生變化 void dlr int x,vector int ans void lrd...
模糊搜尋簡單演算法fuzzywuzzy
fuzzywuzzy 是乙個簡單易用的模糊字串匹配工具包。它依據 levenshtein distance 演算法 計算兩個序列之間的差異。該演算法使用levenshtein距離來計算字串之間的相似性。levenshtein distance 演算法,又叫 edit distance 演算法,是指兩...