洛谷P1549 棋盘问题(2)
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
NO
2
1 2
4 3
#include<iostream>
#include<cstdio>
using namespace std;
int n,map[][],p[],cnt;
int ok[][];
bool th[],vis[],flag;
void dfs(int x,int y){
if(x==n+){
flag=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cout<<map[i][j]<<' ';
}cout<<endl;
}
}
if(flag)return;
int pre1,pre2;
if(x==)pre1=pre2=map[x][y-];
else if(y==)pre1=pre2=map[x-][y];
else pre1=map[x-][y],pre2=map[x][y-];
int nxt1=x,nxt2=y+;
if(nxt2>n)nxt2=,nxt1=x+;
for(int i=;i<=ok[pre1][];i++){
int now=ok[pre1][i];
if(!th[now+pre2]&&!vis[now]){
vis[now]=;
map[x][y]=now;
dfs(nxt1,nxt2);
vis[now]=;
}
}
}
int main(){
scanf("%d",&n);
if(n==){
printf("NO");
return ;
}
th[]=;
for(int i=;i<=;i++){
if(!th[i])p[++cnt]=i;
for(int j=;j<=cnt&&i*p[j]<=;j++){
th[i*p[j]]=;
if(i%p[j]==)break;
}
}
for(int i=;i<=n*n;i++)
for(int j=;j<=cnt;j++){
int to=p[j]-i;
if(to>n*n)break;
if(to>)ok[i][++ok[i][]]=to;
}
vis[]=;
map[][]=;
dfs(,);
if(flag==){
printf("NO");
return ;
}
}
60分 输出顺序不行,WA两个点
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
if(n == ) cout << "1 2" << endl << "4 3";
else if(n == ) cout << "1 2 11 12" << endl << "4 15 8 5" << endl << "7 16 3 14" << endl << "6 13 10 9";
else if(n == ) 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 ;
}
100分 数据范围小,可以打表
洛谷P1549 棋盘问题(2)的更多相关文章
- 洛谷——P1549 棋盘问题(2)
P1549 棋盘问题(2) 搜索||打表 #include<cstdio> #include<cstring> #include<iostream> #includ ...
- 2017普及组D1T3 洛谷P3956 棋盘
2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...
- 洛谷 P3956 棋盘 解题报告
P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...
- 洛谷P1436 棋盘分割
洛谷题目链接 动态规划: 我们设状态$f[i][j][o][p][k]$表示一个矩形,左上角顶点坐标为$(i,j)$,右下角顶点坐标为$(o,p)$时分割了$k$次,也就是说现在是$k+1$块 我们考 ...
- 洛谷 P1436 棋盘分割 解题报告
P1436 棋盘分割 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共 ...
- 洛谷 P1548 棋盘问题
题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(30%) 求出该棋盘中包含有多少个正方形.多少个长方形(不包括正方形). 例如:当 N=2, M= ...
- 洛谷——P1548 棋盘问题
https://www.luogu.org/problem/show?pid=1548#sub 题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(3 ...
- 洛谷 P3956 棋盘
题目描述 有一个m ×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上 ...
- 洛谷P1169 棋盘制作(悬线法)
题目链接:https://www.luogu.org/problemnew/show/P1169 #include<bits/stdc++.h> #define fi first #def ...
随机推荐
- angularJs自定义模块
<script type="text/javascript"> var myApp = angular.module("myApp",[]); my ...
- UML类图几种关系的总结 ---(转载)
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- Flask简介
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- PAT 乙级 1084. 外观数列 (20) 【字符串】
题目链接 https://www.patest.cn/contests/pat-b-practise/1084 思路 用字符串模拟 然后要注意一点 它是连续的 才并在一起 就比如说 d, d1, d1 ...
- 复制一个带random指针的链表
一个单链表,其中除了next指针外,还有一个random指针,指向链表中的任意某个元素.如何复制这样一个链表呢? 通过next来复制一条链是很容易的,问题的难点在于如何恰当地设置新链表中的random ...
- BZOJ 4868-4873 题解
BZOJ4868 每个结束位置的最优值很显然具有单调性,三分,再讨论一下就好了. #include<bits/stdc++.h> using namespace std; #define ...
- BZOJ 4519 [CQOI2016]不同的最小割
这道题目很奇怪. 为什么奇怪?因为这道题用了一种叫分治最小割/最小割树的玩意. 以前从来没有见过这东西. 推荐一个讲这玩意的博客 写起来还是很顺手的. #include<iostream> ...
- 基于KD-Tree的最近邻搜索
目标:查询目标点附近的10个最近邻邻居. load fisheriris x = meas(:,:); figure(); g1=gscatter(x(:,),x(:,),species); %spe ...
- 使用同一个目的port的p2p协议传输的tcp流特征相似度计算
结论: (1)使用同一个目的port的p2p协议传输的tcp流特征相似度高达99%.如果他们是cc通信,那么应该都算在一起,反之就都不是cc通信流. (2)使用不同目的端口的p2p协议传输的tcp流相 ...
- hdu1085Holding Bin-Laden Captive!组合问题
题目连接 题目意思:有单位价值为1 2 5的三种硬币,分别给出他们的数量,求用这些硬币不能组成的最小的价值 解题思路:普通的母函数 普通的母函数: 利用母函数的思想可以解决很多组合问题,下面举例说明: ...