C++
$\color{#cc33ff}{— > 算法基础课题解}$
DFS(深度优先搜索)(一个非常执着的人,我们学习的好榜样):
在一个位置只要有路,就一直走到最深处知道无路可走,再退回上一步,看再上一步的位置能不能换个方向继续往下走。
$图解:$
$code1:$
#include <iostream>
using namespace std;
const int N = 10;
int n;
int path[N]; // 存储所有的方案数
bool st[N]; // 开一个bool数组表示当前点是否被用过,bool数组等于true的话,表示当前点被用过了
void dfs(int u) {
if (u == n) { // 所有位置已经填满(叶节点)
for (int i = 0; i < n; i ++) cout << path[i] << ' ';
cout << endl;
return;
}
for (int i = 1; i <= n; i ++) {
if (!st[i]) { // 如果没有被用过
path[u] = i;
st[i] = true;
dfs(u + 1); // 到下一层循环
st[i] = false; // 恢复原始状态
}
}
}
int main() {
cin >> n;
dfs(0);
return 0;
}
$code2:$
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int path[10];
bool st[10];
void dfs(int u) {
if (u > n) {
for (int i = 1; i <= n; i ++) cout << path[i] << ' ';
cout << endl;
return;
}
for (int i = 1; i <= n; i ++)
if (!st[i]) {
path[u] = i;
st[i] = true;
dfs(u + 1);
st[i] = false;
}
}
int main() {
cin >> n;
dfs(1);
return 0;
}
我更喜欢BFS
hh,各有优势吧,bfs像一个比较稳重的人,每次只会扩展一层,不过这道题是dfs的模板题,就用的dfs啦
enenen,你写题目好多联想,真的好厉害哦,完全被你的形容吸引hhhh
不是我想出来的哦,是看的y总的课,y总举得例子,觉得很形象就记下来了
我看了都忘了
我是记的笔记,忘了就看一下,hh
hhh,这么晚还学吗,行,那我以后就看你的了
没有没有,晚上是娱乐时间,hh