您的位置:首页 > 理论基础

回溯例题(计算机算法设计与分析)

2017-04-24 22:23 295 查看
P153:子集和问题

#include <bits/stdc++.h>

using namespace std;

const int maxn = 25;
int C[maxn];
int n;
void calc(int cur) {
if(cur>=n) {
for(int i=0;i<n;i++)
printf("%d ",C[i]+1);
puts("");
return;
}
else {
for(int i=0;i<n;i++) {
int ok = 1;
C[cur] = i;
for(int j=0;j<cur;j++) {
if(C[cur]==C[j]||cur-C[cur]==j-C[j]||cur+C[cur]==j+C[j]) {
ok = 0;
break;
}
}
if(ok) {
calc(cur+1);
return;
}
}
}
return;
}

int main()
{
scanf("%d",&n);
calc(0);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: