洛谷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 ...
 
随机推荐
- 【windows】如何让一个程序开机自启动
			
windows的开机自启动也是将一个程序放在文件夹下即可,将应用程序或者快捷方式放在如下文件夹下,即可实现开机自启动 C:\ProgramData\Microsoft\Windows\Start Me ...
 - 【总结】性能调优:JVM内存调优相关文章
			
[总结]性能调优:JVM内存诊断工具 [总结]性能调优:CPU消耗分析 [总结]性能调优:消耗分析 JVM性能调优
 - C++函数模板的显示调用与隐式调用
			
C++函数模板可以显示调用与可以隐式调用 首先定义函数模板: template <class T> inline const T& c_max (const T& a, c ...
 - pkg-config设置
			
pkg-config在一些源码管理中会被使用到. 介绍 上网查资料,知道了pkg-config这个东西,下面简单介绍一下. pkg-config提供了下面几个功能: 检查库的版本号.如果所需要的库的版 ...
 - Cannot load JDBC driver class 'com.mysql.jdbc.Driver '
			
最近在学JAVA, SSM, 照着网上的例子系统启动后总是报这个错(IDE :IEDA): HTTP Status 500 - Request processing failed; nested ex ...
 - Contiki 2.7 Makefile 文件(五)
			
4.第四部分 (1) oname = ${patsubst %.c,%.o,${patsubst %.S,%.o,$(1)}} 自定义函数,$(1)表示调用oname这个函数的第一个参数,patsub ...
 - Java内部类复习
			
package com.t_06; import org.junit.Test; import com.t_06.StaticClass.StaticInnerClass; /** * 一个类的定义放 ...
 - Java丨springMVC + Ajax 来进行分页
			
javaweb 分页技术 实现的方式有很多种,但是小编在网上问了度娘也问了谷老师,得到的答案让小编我不是很满意,so,还是自己写吧! 在小编的博文中,小编不会上传源码,只会把重要的代码和思路供大家参考 ...
 - POJ3468 A Simple Problem with Integers(数状数组||区间修改的RMQ问题)
			
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...
 - 1139 First Contact(30 分)
			
Unlike in nowadays, the way that boys and girls expressing their feelings of love was quite subtle i ...