填数
来源:互联网 发布:淘宝直播浮现规则 编辑:程序博客网 时间:2024/04/29 18:08
101. 填数
★ 输入文件:tianshu.in
输出文件:tianshu.out
简单对比时间限制:2 s 内存限制:128 MB
【问题描述】
在一个 N*N 的棋盘上( 1 ≤ N ≤ 10 ),填入 1 , 2 ,…, N*N 共 N*N 个数,使得任意两个相邻的数之和为素数。
例如:当 N=2 时,有:
1
2
4
3
当 N=4 时,一种可以填写的方案如下:在这里我们约定:左上角的格子里必须填数字 1 。
1
2
11
12
4
9
8
5
7
10
3
14
6
13
16
15
【输入格式】
文件只有一行为一个正整数n
【输出格式】
输出文件有n行,每行有n个数,中间用一个空格隔开
如有多种解,设a[i,j]为解的第i行第j个数,则输出以i为第一关键字,j为第二关键字,小数在前的那一种方案;若无解,则输出“NO”。
【输入输出样例】
输入:
2
输出:
1 2
4 3
搜索。。DFS+回溯。。但是在搜索n=11时,会超时。。原来数据中还有11.。目前还没有想到好的剪枝。直接对11进行打表了。
#include<cstdio>#include<cmath>using namespace std;int ans[13][13];bool vis[150];int prim[300];void get_prim(){ int i; for(int n=2;n<300;n++){ for( i=2;i<=sqrt(n);i++) if(n%i==0) break; if(i>sqrt(n)) prim[n]=true; }}int n,flag;void dfs(int x,int y){ if(flag) return ; if(x==n+1&&y==1){ flag=1; return ; } for(int i=2;i<=n*n;i++){ if(flag) return ; if(!vis[i]){ if(y>1&&!prim[i+ans[x][y-1]]) continue; if(x>1&&!prim[i+ans[x-1][y]]) continue ; ans[x][y]=i; vis[i]=true; if(y==n) { dfs(x+1,1); } else{ dfs(x,y+1); } vis[i]=false; } }}int main(){ freopen("tianshu.in","r",stdin); freopen("tianshu.out","w",stdout); get_prim(); scanf("%d",&n); if(n==11){ printf("1 2 3 4 7 6 5 8 9 10 13\n"); printf("12 11 20 27 16 25 18 23 14 33 28\n"); printf("17 26 21 32 15 22 19 24 29 38 45\n"); printf("30 41 62 35 44 39 34 37 42 59 68\n"); printf("31 48 65 36 53 50 63 46 55 54 83\n"); printf("40 49 102 47 56 51 76 61 52 85 66\n"); printf("43 58 79 60 71 80 87 70 57 82 91\n"); printf("64 73 120 103 96 77 104 93 106 67 100\n"); printf("109 118 121 90 101 72 107 74 117 112 81\n"); printf("84 115 108 89 78 95 86 105 94 99 92\n"); printf("97 114 119 110 113 116 111 88 69 98 75\n"); return 0; } flag=0; vis[1]=true; ans[1][1]=1; dfs(1,2); if(flag){ for(int i=1;i<=n;i++){ for(int j=1;j<n;j++) printf("%d ",ans[i][j]); printf("%d\n",ans[i][n]); } } else{ printf("NO\n"); } return 0;}
- 填数
- 填数
- 填数
- NYOJ---蛇形填数(方块填数+三角填数)
- 蛇形填数(方块填数+三角形填数)
- 【java】蛇形填数 螺旋填数
- 矩阵填数
- 蛇形填数
- 算法:蛇形填数
- 蛇形填数
- 巧妙填数
- 巧妙填数
- 蛇形填数
- 蛇形填数
- 蛇形填数问题
- 蛇形填数
- C++蛇形填数
- 蛇形填数
- android:name
- 57.黑马程序员-反射
- 日前参院议长否认石原与野田勾结“购岛”-前参院议长-野田-石原
- Linux运维工程师面试题
- 英语练习 74 Working hard
- 填数
- 新疆投资600万将首枚原子弹试验场开发为旅游点-马兰基地-核武器试验-红色旅游景点
- C++中堆和栈的区别,自由存储区、全局静态存储区和常量存储区
- redhat6.3 nfs服务器配置
- iNand
- HTTP协议详解
- How-to Guide: Perfect Action Alert Uninstall
- shell 知识点补充(2)-重定向/ ; , &&, ||/管线命令/grep/sort/ uniq/wc/tee/tr/col/join/paste/expand/split/-
- 教育部:军事国防等专业可按男女比例招生-高考招生-性别-歧视