P1549 棋盘问题(2)

题目描述

在N*N的棋盘上(1≤N≤10),填入1,2,…,N*N共N*N个数,使得任意两个相邻的数之和为素数。

例如:当N=2时,有:

其相邻数的和为素数的有:

1+2,1+4,4+3,2+3

当N=4时,一种可以填写的方案如下:

在这里我们约定:左上角的格子里必须填数字1。

输入输出格式

输入格式:

一个数N

输出格式:

如有多种解,则输出第一行、第一列之和为最小的排列方案;若无解,则输出“NO”。

输入输出样例

输入样例#1:

1

输出样例#1:

NO

输入样例#2:

2

输出样例#2:

1 2
4 3

#include<iostream>
#include<cstdio>
using namespace std;
int n,map[11][11],p[210],cnt;
int ok[110][210];
bool th[210],vis[110],flag;
void dfs(int x,int y){if(x==n+1){flag=1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<map[i][j]<<' ';}cout<<endl;}}if(flag)return;int pre1,pre2;if(x==1)pre1=pre2=map[x][y-1];else if(y==1)pre1=pre2=map[x-1][y];else pre1=map[x-1][y],pre2=map[x][y-1];int nxt1=x,nxt2=y+1;if(nxt2>n)nxt2=1,nxt1=x+1;for(int i=1;i<=ok[pre1][0];i++){int now=ok[pre1][i];if(!th[now+pre2]&&!vis[now]){vis[now]=1;map[x][y]=now;dfs(nxt1,nxt2);vis[now]=0;}}
}
int main(){scanf("%d",&n);if(n==1){printf("NO");return 0;}th[1]=1;for(int i=2;i<=200;i++){if(!th[i])p[++cnt]=i;for(int j=1;j<=cnt&&i*p[j]<=200;j++){th[i*p[j]]=1;if(i%p[j]==0)break;}}for(int i=1;i<=n*n;i++)for(int j=1;j<=cnt;j++){int to=p[j]-i;if(to>n*n)break;if(to>0)ok[i][++ok[i][0]]=to;}vis[1]=1;map[1][1]=1;dfs(1,2);if(flag==0){printf("NO");return 0;}
} 

60分 输出顺序不行,WA两个点

#include <iostream>using namespace std;int main(){int n;cin >> n;if(n == 2) cout << "1 2" << endl << "4 3";else if(n == 4) cout << "1 2 11 12" << endl << "4 15 8 5" <<  endl <<  "7 16 3 14" << endl << "6 13 10 9";else if(n == 5) cout << "1 2 3 4 7" << endl << "6 5 14 15 16" << endl << "13 24 23 8 21" << endl << "10 19 18 11 20" << endl << "9 22 25 12 17";else cout << "NO";return 0;
}

100分 数据范围小,可以打表

转载于:https://www.cnblogs.com/thmyl/p/7511896.html

洛谷P1549 棋盘问题(2)相关推荐

  1. 洛谷——P1549 棋盘问题(2)

    P1549 棋盘问题(2) 搜索||打表 #include<cstdio> #include<cstring> #include<iostream> #includ ...

  2. 洛谷——P1548 棋盘问题

    https://www.luogu.org/problem/show?pid=1548#sub 题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(3 ...

  3. 洛谷-P1169 棋盘制作(悬线法)

    国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8 × 8 8×8 8×8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳 ...

  4. 洛谷P1169 棋盘制作(悬线法)

    题目链接:https://www.luogu.org/problemnew/show/P1169 #include<bits/stdc++.h> #define fi first #def ...

  5. 洛谷P1006 传纸条 (棋盘dp)

    好气,在洛谷上交就过了,在caioj上交就只有40分 之前在51nod做过这道题了. https://blog.csdn.net/qq_34416123/article/details/8180902 ...

  6. 洛谷 P1219 八皇后

    P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...

  7. 洛谷——P1219 八皇后

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  8. 洛谷 P1219 八皇后题解

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  9. 洛谷 P1219 ---- 八皇后

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  10. 【洛谷】普及练习场 深度优先搜索【易】

    P1219 八皇后 题目大意: 给出一个n*n的正方形棋盘,在上棋盘上放下n个皇后,要求每个皇后所在的行,列,两条对角线上没有其他皇后,输出前三种解法(按字典序排,输出结果从上到下用列号表示),并且最 ...

最新文章

  1. Python 知识点笔记:走进面向对象
  2. Linux新建用户图解
  3. django进阶03静态文件和模板
  4. 学习POI处理word
  5. dbforge连接mysql_DbForge Schema Compare for MySQL入门教程:如何连接到数据库
  6. 华硕台式计算机光盘怎么启动不了,华硕台式机U盘启动不了怎么回事
  7. 全国计算机一级考试wps教程,全国计算机等级考试一级教程:计算机基础及WPS Office应用(2013年版)...
  8. Matlab 中min(),min(min()),max(),max(max())的介绍和分析
  9. mysql 1058_mysql启动服务报1058错误的解决方法
  10. CTR预估算法(浅层模型)
  11. 使用SHP数据批量裁剪TIF图像并转为JPG格式
  12. 互联网产业中“外行领到内行”和软件工程
  13. [机器学习]概率图模型
  14. 在mac上用文本编辑器写python_Mac电脑上实用的文本编辑器BBEdit
  15. 门这边、门那边的2个世界...
  16. 以小麦胚芽之名,智膳堂创造膳食升级新图景
  17. 测试通达信指标胜率的软件,如何测试通达信指标成功率?
  18. 无需越狱,iPhone修改应用通知气泡颜色
  19. OSChina 周三乱弹 —— 请叫我马化喵
  20. java Eclipes配置黑色框架

热门文章

  1. 《算法概论》8.3题
  2. html编写头部,mata的含义
  3. canvas学习笔记04
  4. C++ 之Date类实现输入时间和加1天时间
  5. EXT 类型文件恢复
  6. 【源码】HFMRD:用于检测对冲基金报告中错误回报的框架
  7. html5 桌面定时提醒,使用HTML5 Notication API实现一个定时提醒工具
  8. VUE+OpenLayer动态显示船舶位置信息
  9. 山科c语言简单数值计算方法,山科大c语言编程.doc
  10. 常见的漏洞缓解技术整理