一般用递归实现DFS算法................
void DFS(type n){ //可以描述阶段的状态
if(符合条件) {cout<<答案;return;} //出口
if(可以剪枝) return; //剪枝
for(i:1~p){ //选择该阶段的所有决策
选择可行决策; //剪枝的一种
标记已访问该点;
DFS(n+1); //进入下一阶段
(还原访问现场;)
}
}
BFS算法一般用队列实现
void BFS(int s){
queue<int> q;
q.push(s);
while(!q.empty()){
取出队首元素top;
访问队首元素top;
将队首元素出队;
将top的下一层结点中未曾入队的结点全部入队,并设置为已入队;
}
}
DFS遍历图
DFS(u){ //访问顶点u
vis[u]=true;
for(从u出发可以到达的所有顶点v){
if(vis[v]==false){
DFS(v);
}
}
}
DFSTrave(){ //遍历图G
for(图G的所有顶点u){
if(vis[u]==false){
DFS(u); //访问u所在的连通块
}
}
}
BFS遍历图
BFS(u){
queue q;
将u入队;
vis[u]=true;
while(q非空){
取出q的队首元素访问;
for(从u出发可达的所有顶点v){
if(vis[v]==false){
将v入队;
vis[v]=true;
}
}
}
}
BFSTrave(G){
for(G的所有顶点u){
if(vis[u]==false){
BFS(u);
}
}
}