Another Eight Puzzle
following 8 circles with digits 1~8,with each number exactly once .
Conntcted circles cannot be filled with two consecutive
numbers.
There are 17 pairs of connected cicles:
A-B , A-C, A-D
B-C, B-E, B-F
C-D, C-E, C-F, C-G
D-F, D-G
E-F, E-H
F-G, F-H
G-H
Eight Puzzle" title="Another Eight Puzzle">Filling G with 1 and D with 2 (or G with 2 and D with 1) is illegal
since G and D are connected and 1 and 2 are consecutive .However
,filling A with 8 and B with 1 is legal since 8 and 1 are not
consecutive .
In this problems,some circles are already filled,your tast is to
fill the remaining circles to obtain a solution (if
possivle).
contains a single integer T(1≤T≤10),the number of test cases. Each
test case is a single line containing 8 integers 0~8,the numbers in
circle A~H.0 indicates an empty circle.
case ,print the case number and the solution in the same format as
the input . if there is no solution ,print “No answer”.If there
more than one solution,print “Not unique”.
0 0
0 0
0 0
1 4 5 8 6 2
unique
answer
A-D
B-A, B-C,
B-E, B-F
C-A, C-B, C-D, C-F,
C-E,C-G
D-A, D-C, D-F, D-G
E-B, E-C, E-F, E-H
F-C, F-D, F-G, F-H, F-E,
F-B
G-D, G-C, G-F, G-H
H-E, H-F, H-G
A=1 B=2 C=3 D=4 E=5 F=6 G=7
H=8
#include
#include
#include
#include
#define maxn 10
using namespace std;
int pos[maxn],t,visit[maxn],ans=0,mark[maxn],p[maxn];
bool conect(int x,int y)
{
if (x>y)
{int t=x; x=y; y=t;}
switch
(x)
{
case 1:return y==2 || y==3 || y==4;
case 2:return y==3 || y==5 || y==6;
case 3:return y==4 || y==5 || y==6 || y==7;
case 4:return y==6 || y==7;
case 5:return y==6 || y==8;
case 6:return y==7 || y==8;
case 7:return y==8;
}
}
bool ok(int p)
{
int i;
for
(i=1;i<=8;i++)
if ((conect(i,p) && abs(pos[p]-pos[i])==1) &&
pos[i]!=0) return 0;
return
1;
}
void dfs(int cur)
{
//cout<<cur<<" ";
if(ans>1)
return ;//剪枝大于2了就不需要在搜了
//cout<<"cur="<<cur<<endl;
while(cur<=8&&pos[cur]) cur++;//把0空过去
if(cur>8)
{
ans++;
if(ans==1)//因为只有ans=1时才需要输出
memcpy(p,pos,sizeof(pos));//将整个数组转移过来
return;
}
for(int
i=1;i<=8;i++) if(!visit[i])
{
//cout<<cur<<endl;
//cout<<i<<" ";
visit[i]=1;
pos[cur]=i;
if(ok(cur))//相邻的不是相邻的数
dfs(cur+1);
pos[cur]=0;//原来这里就是零的
visit[i]=0;//释放标记,用于下一次搜索;
if(ans>1)
return;
}
}
int main()
{
//freopen("in.txt", "r", stdin);
int
flag=0;
scanf("%d",&t);
for(int
i=1;i<=t;i++)
{
ans=0;
memset(pos,0,sizeof(pos));
memset(visit,0,sizeof(visit));
for(int j=1;j<=8;j++)
{
scanf("%d",&pos[j]);
visit[pos[j]]=1;
}
dfs(1);
//cout<<"ans="<<ans<<endl;
printf("Case %d: ",i);
if(!ans)
printf("No answer");
else if(ans==1)
for(int i=1;i<=8;i++)
printf(i==1?"%d":" %d",p[i]);
else
printf("Not unique");
printf("\n");
}
}
Another Eight Puzzle的更多相关文章
- Puzzle 面向服务/切面(AOP/IOC)开发框架 For .Net
Puzzle 面向服务/切面AOP开发框架 For .Net AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效 ...
- HDU5456 Matches Puzzle Game(DP)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5456 Description As an exciting puzzle game for ...
- one recursive approach for 3, hdu 1016 (with an improved version) , permutations, N-Queens puzzle 分类: hdoj 2015-07-19 16:49 86人阅读 评论(0) 收藏
one recursive approach to solve hdu 1016, list all permutations, solve N-Queens puzzle. reference: t ...
- poj3678 Katu Puzzle 2-SAT
Katu Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6714 Accepted: 2472 Descr ...
- POJ1651Multiplication Puzzle[区间DP]
Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8737 Accepted: ...
- codeforce B Island Puzzle
B. Island Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- poj 1651 Multiplication Puzzle (区间dp)
题目链接:http://poj.org/problem?id=1651 Description The multiplication puzzle is played with a row of ca ...
- Ignatius's puzzle
Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- A hard puzzle
A hard puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1097 A hard puzzle
Problem Description lcy gives a hard puzzle to feng5166,lwg,JGShining and Ignatius: gave a and b,how ...
随机推荐
- ACM-ICPC北京赛区(2017)网络赛_Minimum
题目9 : Minimum 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a list of integers a0, a1, -, a2^k ...
- js函数基础知识
[函数的声明及调用] function 函数名(参数1,参数2,....){ //函数体代码 return返回值: } 1.函数的调用: ①直接调用:函数名(参数1的值,参数2的值,....) ②事件 ...
- 【京东详情页】——原生js爬坑之放大镜
一.引言 在商城的详情页中,放大镜的功能是很常见的.这里京东详情页就要做一个仿放大镜的效果,预览如下: 二.实现原理 实际上,放大镜的实现是单纯用几个div,鼠标移入其中一个小图div,触发事件显示另 ...
- shim 和 polyfill
在前端,有两个词经常被提及:shim 和 polyfill.最近在翻译文章时又遇到了 polyfill 这个词,准备把这两个概念理清楚. 关于 JavaScript 的兼容性问题,通常有不同的解决方案 ...
- http://codeforces.com/problemset/problem/594/A
A. Warrior and Archer time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- 嵌入式linux开发之工具------tftp
我在嵌入式linux开发中用到tftp的地方主要有2个方面: 1.是在嵌入式目标板启动时,bootloader启动时通过uEnv文件,下载dtb文件和kernel文件: 2.是在嵌入式目标板启动后,通 ...
- Tomcat 设置自启动时遇到的错误问题与解决方案
首先,今天在做tomcat开机自启动时,原本很简单的一个问题,但却浪费了很长时间: 首先系统环境采用的是Window10,设置Tomcat自启动过程当中需要注意的是:JDK的版本和Tomcat的位数必 ...
- 兼容低版本JS的Array.map方法
前几天去别的公司面试遇到个这样的问题,兼容IE7下的Array.map方法,一脸蒙蔽.后面回来查了下资料发现.Array.map方法是ECMA-262 标准中新添加的方法,在低版本的JS中是木有的. ...
- c#(asp.net) 多线程示例,用于同时处理多个任务
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 史上最难的一道Java面试题 (分析篇)
博客园 匠心零度 转载请注明原创出处,谢谢! 无意中了解到如下题目,觉得蛮好. 题目如下: public class TestSync2 implements Runnable { int b = 1 ...