从起点出发,走过的点做标记,发现没有走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就称为 “深度优先搜索(Depth First Search)”。
其实称为 “远度优先搜索” 更容易理解。因为这种策略能往前走一步就往前走一步,总是试图走的更远,所谓远近(深度),其实是以距离起点来衡量的。
- bool DFS(v)
- {
- if(v为终点)
- return true;
- if(v为旧点)
- return false;
- 将v标记为旧点;
- 对和v相邻的每个节点u
- {
- if(DFS(u) == true)
- return true;
- }
- return false;
- }
- int main()
- {
- 将所有点都标为新点;
- 起点_x = x;
- 起点_y = y;
- cout<<Dfs(起点);
- }
- Node path[Max_len];//Max_len取节点总数即可
- int depth;
- bool DFS(v)
- {
- if(v为终点)
- {
- path[depth] = v;
- return true;
- }
- if(v为旧点)
- return false;
- 将v标记为旧点;
- path[depth] = v;
- ++depth;
- 对和v相邻的每个节点u
- {
- if(DFS(u) == true)
- return true;
- }
- --depth;
- return false;
- }
- int main()
- {
- 将所有的点都标记为新点;
- depth = 0;
- if(DFS(起点))
- {
- for(int i = 0;i <= depth;i++)
- {
- cout<<depth[i]<<endl;
- }
- }
- }
- //深度优先遍历图上所有节点
- DFS(v)
- {
- if(v是旧点)
- return;
- 将v标记为旧点;
- 对和v相邻的所有节点u
- {
- DFS(u);
- }
- }
- int main()
- {
- 将所有的点都标为新点;
- while(在图中能找到新点k)
- {
- DFS(k);
- }
- }