题目描述

在N×NN \times NN×N的棋盘上(1≤N≤10)(1≤N≤10)(1≤N≤10),填入1,2,…,N21,2,…,N^21,2,…,N2共N2N^2N2个数,使得任意两个相邻的数之和为素数。

例如:当N=2N=2N=2时,有:

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

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

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

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

输入输出格式

输入格式:

一个数NNN

输出格式:

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

输入输出样例

输入样例#1: 复制

1
输出样例#1: 复制

NO
输入样例#2: 复制

2

输出样例#2: 复制

1 2


一开始没看到第一行和第一列的和最小,一直以为只用第一列的和最小...
其实都差不多...
就是正常的搜索, 加上一维判断是不是第一列第一行搜完了。
我采取的策略是先搜第一行第一列,然后从(2, 2)点开始搜索。

 
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define reg register
inline int read() {
int res=;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch))res=(res<<)+(res<<)+(ch^),ch=getchar();
return res;
} int n;
bool is[*];
int use[];
int a[][]; inline void dfs(int x, int y, int end, int beg)
{
//printf("%d %d\n", x, y);
if (end) {
for (reg int i = ; i <= n ; i ++, puts(""))
for (reg int j = ; j <= n ; j ++)
printf("%d ", a[i][j]);
exit();
}
bool flag = ;
for (reg int i = ; i <= n * n ; i ++)
{
if (use[i]) continue;
if ((x == or is[i+a[x-][y]]) and (y == or is[i+a[x][y-]]))
{
int x1 = x, y1 = y + ;
if (beg) {
if (x == and y >= ) x1 = , y1 = y + ;
if (y == and x >= ) x1 = x + , y1 = ;
if (x == and y == n) x1 = , y1 = ;
}
flag = ;
int tmp = , tmp2 = beg;
if (x == n and y == n) tmp = ;
if (x == n and y == ) tmp2 = , x1 = , y1 = ;
if (!beg and y == n and x != n) x1 = x + , y1 = ;
a[x][y] = i;
use[i] = ;
dfs(x1, y1, tmp, tmp2);
use[i] = ;
a[x][y] = ;
}
}
if (!flag) return ;
} int main()
{
n = read();
if (n == ) return puts("NO"), ;
for (reg int i = ; i <= n * n * ; i ++)
{
for (reg int j = ; j * j <= i ; j ++)
if (i % j == ) {is[i] = ;goto End;}
is[i] = ;
End:;
}
a[][] = ;
use[] = ;
dfs(, , , );
puts("NO");
return ;
}

 

[Noip1997] 棋盘问题(2)的更多相关文章

  1. NOIP原题板刷

    update 10.11 我可能已经刷完大部分了,可是这篇blog我也不想更了 这个人很懒,做了很多题但是不想写题解,也不想更blog,所以这篇blog又咕咕了. 把从 \(1997-2017\) 近 ...

  2. 棋盘问题(NOIP1997)

    题目链接:棋盘问题 这道题水不水呢?还是很水的,为什么?因为数据太小了.直接算就行了. #include<bits/stdc++.h> using namespace std; int m ...

  3. TYVJ1035 棋盘覆盖

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩 ...

  4. POJ 1321 棋盘问题(dfs)

    传送门 棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38297   Accepted: 18761 Descri ...

  5. 设计一个自动生成棋盘格子的JS小程序

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. BZOJ1057[ZJOI2007]棋盘制作 [单调栈]

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

  7. 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 753  Solved: 444[Submit][Status][Discuss] D ...

  8. 【ZJOI2007】棋盘制作 BZOJ1057

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

  9. Unity手撸2048小游戏——自动生成4*4棋盘

    1.新建文件夹,命prefabs,将刚刚做成的Chessman拖入该文件下,做成预制体 2.删除panel下的Chessman 3.在panel下,新建一个空对象,命名为Chessboard,大小设置 ...

随机推荐

  1. SQLServer之MAX() 函数

    MAX() 函数 MAX 函数返回一列中的最大值.NULL 值不包括在计算中. SQL MAX() 语法 SELECT MAX(column_name) FROM table_name 注释:MIN ...

  2. 【PTA】浙江大学数据结构慕课 课后编程作业 03-树1 树的同构

    题目内容 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右 ...

  3. Python连载39-生成器、next函数、yield返回值

    ​一.生成器 1.定义(generator):一边循环一边计算下一个元素的机制/算法 2.满三个条件 (1)每次调用都能产生出for循环需要的下一个元素 (2)如果达到最后一个后,能够爆出StopIt ...

  4. [Leetcode] 第313题 超级丑数

    一.题目描述 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13, ...

  5. el-table合并行并自定义某一列或几列

    在el-table的官方组件中并没有看到具体的合并行或者列及自定义表格内容,于是就自己写了一个效果如下所示. 这种对左侧内容要求比较高,要求行合并,并要自定义一些内容.下面说一下具体方法及代码写法. ...

  6. 5分钟了解Prometheus

    Prometheus(译:普罗米修斯)用领先的开源监控解决方案为你的指标和警报提供动力(赋能). 1.  概述 1.1.  Prometheus是什么? Prometheus是一个开源的系统监控和警报 ...

  7. JS中3种风格的For循环有什么异同?

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://blog.bitsrc.io/3-flavors-of-the-for-loop-i ...

  8. 大数据处理中的Lambda架构和Kappa架构

    首先我们来看一个典型的互联网大数据平台的架构,如下图所示: 在这张架构图中,大数据平台里面向用户的在线业务处理组件用褐色标示出来,这部分是属于互联网在线应用的部分,其他蓝色的部分属于大数据相关组件,使 ...

  9. 数据结构之二叉树篇卷一 -- 建立二叉树(With Java)

    一.定义二叉树节点类 package tree; public class Node<E> { public E data; public Node<E> lnode; pub ...

  10. docker容器添加对外映射端口

    一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 docker run -it -d --name [contain ...