DFS
学名:深度优先搜索。
用途:1.通过遍历所有路径,来判断两点之间是否连通。(最常用)
2.因为要走遍所有可能路径,所以也可以记录 能够到达的 位置 的个数。
特点:一搜到底。即走遍所有可能的路径。
难点:如何将题目抽象成一张图。
思路:
int Map[][]; //记录图。
int visit[][]; //记录每个位置是否走过或者能否走,走过或者不能走就为1,否则就是0.
int flag = 0; //到达终点的标志。
int xdir[4] = { -1,0,1,0 };
int ydir[4] = { 0,1,0,-1 };
void DFS(int sx, int sy) // start x; start y.
{
if (flag)
return;
if (sx || sy || visit == 1) //判断坐标是否越界,以及该坐标是否走过或者能否走。
return;
if (Map[sx][sy] == end) { //判断是否到达终点。
flag = 1;
return;
}
visit[sx][sy] = 1; //当满足上述条件,说明这一步可以走。所以将这一步标志为走过。(*)
for (int i = 0; i < 4; i++) {
tx = sx + xdir[i]; //下一步的坐标
ty = sy + ydir[i];
DFS(tx, ty);
}
}
dfs用栈。