看到pat里很多题目要用到Dijkstra和DFS结合,想着回顾一下DFS
这位讲的挺好:https://blog.csdn.net/weixin_44026819/article/details/86554564
例题:https://blog.csdn.net/wonengguwozai/article/details/84634423
寻宝路线:https://blog.csdn.net/Ratina/article/details/88258412
DFS:一条路走到黑再回头,有结果或者失败返回这个点。
DFS最简单的例子就是全排列:
#include<iostream>
using namespace std;
int book[10],out[10];//book存放这个数是否被用了,out存放排列结果
int n = 3;
void dfs(int step){//从第step个开始到结束
if(step >= n){//如果step到最后一个了,那这次排列就完成了,输出
for(int i = 0; i < n; i++){
cout << out[i];
}
cout << endl;
return;
}
for(int i = 1; i <= n; i++){ //在step里尝试放置1--n
if(book[i] == 0){//如果没被用过
out[step] = i;//把i放到第step个
book[i] = 1;//i用过了
dfs(step+1);//对下一个递归 直到输出
book[i] = 0; //下个循环就看step能不能放下一个i,要把这个i的使用置为0
}
}
}
int main(){
dfs(0);
return 0;
}