1 条题解
-
0
C :
#include "stdio.h" int a[13]; int b[13]={0},c[26]={0},d[26]={0}; int n,flag=0,s=0; void F(int t) { int i; if(t==n) { flag++; s++; if(flag<=3) { for(i=0;i<n-1;i++) printf("%d ",a[i]+1); printf("%d\n",a[n-1]+1); } } else { for(a[t]=0;a[t]<n;a[t]++) { if(b[a[t]]==0&&c[n-a[t]+t]==0&&d[a[t]+t]==0) { b[a[t]]=1; c[n-a[t]+t]=1; d[a[t]+t]=1; F(t+1); b[a[t]]=0; c[n-a[t]+t]=0; d[a[t]+t]=0; } } } } int main() { scanf("%d",&n); for(a[0]=0;a[0]<n;a[0]++) { b[a[0]]=1; c[n-a[0]]=1; d[a[0]]=1; F(1); b[a[0]]=0; c[n-a[0]]=0; d[a[0]]=0; } printf("%d\n",s); return 0; }
C++ :
#include <iostream> #include <cmath> #include <cstring> using namespace std; int n,k=1,x=0; int s[15],a[15],b[30],c[30]; bool check(int h) { if (a[s[h]]==1 || b[h-s[h]+n]==1 || c[h+s[h]]==1) return 0; else return 1; } int clear() { for (int i=1;i<=15;i++) a[i]=0; for (int i=1;i<=30;i++) b[i]=0; for (int i=1;i<=30;i++) c[i]=0; } int main() { cin>>n; s[k]=1; while (k>0) { while (!check(k) && s[k]<=n) s[k]++; if (s[k]<=n){a[s[k]]=1; b[k-s[k]+n]=1; c[k+s[k]]=1; k++; s[k]=1;} else{k--; a[s[k]]=0; b[k-s[k]+n]=0; c[k+s[k]]=0; s[k]++;} if (k==n+1) {x+=1; if (x<=3) { for (int i=1;i<=n-1;i++) cout<<s[i]<<" "; cout<<s[n]; cout<<endl; } k--;a[s[k]]=0; b[k-s[k]+n]=0; c[k+s[k]]=0; s[k]++; } } cout<<x<<endl; // system ("pause"); return 0; }
- 1
信息
- ID
- 2395
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者