题目描述 如题
图中存在谬误,恳请各位大佬斧正。递归真难,hh。
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 20;
int a[N], b[N], s[N], n;
void dfs(int u) {
if(u == n) {
for(int i = 0; i < n; i++)
cout << b[i] << " ";
puts("");
return;
}
for(int i = 0; i < n; i++) {
if(s[i]) continue;
if(i && a[i - 1] == a[i] && s[i - 1]) continue;
s[i] = 1;
b[u] = a[i];
dfs(u + 1);
s[i] = 0;
}
}
void dfs(int u, int s) {
if(u == n) {
for(int i = 0; i < n; i++)
cout << b[i] << " ";
puts("");
return;
}
for(int i = 0; i < n; i++) {
if(s >> i & 1) continue;
if(i && a[i - 1] == a[i] && s >> (i - 1) & 1) continue;
b[u] = a[i];
dfs(u + 1, s | 1 << i);
}
}
int main() {
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
dfs(0);
//dfs(0, 0);
return 0;
}
%%%懂了 谢谢大佬
膜拜画图大佬 终于看懂了 另外原来那个线上的数字是数组元素序号的意思啊。。。。
膜拜大佬
按图索骥,代码就知道怎么拿捏了。一开始是死记硬背,现在就是要理解。理解万岁。
大佬,递归也可以看作是一种循环对吗?
递归不是循环,递归利用了系统栈,只要是函数都会被系统管理。当执行到函数地址入口时就会为函数在系统栈上分配一块内存。当函数在自己内部再次调用自己,那么系统又会给此时调用的函数再次分配内存,结果说就是层层调用。递归就是这么回事。