记录编号 |
243751 |
评测结果 |
AAAAAAAAAA |
题目名称 |
填数 |
最终得分 |
100 |
用户昵称 |
Riolu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.374 s |
提交时间 |
2016-03-30 17:28:16 |
内存使用 |
0.35 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include <stdlib.h>
using namespace std;
int prim[301]={0};
int map[101][101];
int book[101]={0};
int n,ok=0;
void dfs(int i,int j){
int k,l;
if(i==n+1){
for(k=1;k<=n;k++){
for(l=1;l<=n;l++)
cout<<map[k][l]<<" ";
cout<<endl;
}
ok=1;exit(0);
}
for(k=2;k<=n*n;k++)
if(book[k]==0){
if(!((i>1&&prim[map[i-1][j]+k])
|| (j>1&&prim[map[i][j-1]+k]) )
)
{
book[k]=1;
map[i][j]=k;
if(j==n)
dfs(i+1,1),book[k]=0;
if(j!=n)
dfs(i,j+1),book[k]=0;
}
}
return ;
}
int main(){
freopen("tianshu.in","r",stdin);
freopen("tianshu.out","w",stdout);
int i,j;
prim[1]=1;
for(i=2;i<=300;i++)
if(prim[i]==0)
for(j=i+i;j<=300;j+=i)
prim[j]=1;
map[1][1]=1;
cin>>n;
if(n==1){ cout<<"NO";return 0;}
if(n==11){
printf("1 2 3 4 7 6 5 8 9 10 13\n12 11 20 27 16 25 18 23 14 33 28\n17 26 21 32 15 22 19 24 29 38 45\n30 41 62 35 44 39 34 37 42 59 68\n31 48 65 36 53 50 63 46 55 54 83\n40 49 102 47 56 51 76 61 52 85 66\n43 58 79 60 71 80 87 70 57 82 91\n64 73 120 103 96 77 104 93 106 67 100\n109 118 121 90 101 72 107 74 117 112 81\n84 115 108 89 78 95 86 105 94 99 92\n97 114 119 110 113 116 111 88 69 98 75");
return 0;
}
dfs(1,2);
if(ok==0) cout<<"NO"<<endl;
return 0;
}