1. 判断从V出发是否能走到终点:
bool dfs(v){
if(V是终点) return true;
if(V是旧点) return false;
将V标记为旧点;
对和V相邻的每个节点U{
if(dfs(u) == true) return true;
}
return false;
}
2.判断从V出发是否能走到终点,如果能,要记录路径
Node path[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;
}
//V不应该出现在该路径上
//退回到V的父节点
--depth;
return false;
}
int main(){
将所有的点都标记为新点;
depth = 0;
if(dfs(起点)){
if(int i = 0; i <= depth; i++){
cout << path[i] << endl;
}
}
}
3.遍历图上的所有节点
dfs(V){
if(V是旧点) return;
将V标记为酒店;
对和V相邻的每个点U{
dfs(U);
}
}
int main(){
将所有的点都标记为新点;
while(在图中能找到新点k)
dfs(k)
}
4. 图的表示方法:邻接矩阵
用一个二维数组G存放图
G[i][j]
表示节点i和节点j之间边的情况(如有无边,边方向,权值大小等)
遍历复杂度O(n2), n为节点数目
5. 图的表示方法:邻接表
- 边稀疏,使用邻接表