Gnome Tetravex
zoj1008:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008
题目意思是有一个游戏,即给出一个图,该图是由n*n个小正方形组成,每个小正方形又由4个三角形组成,要求用这n*n个小正方形拼成一个图,该图的每个小正方形的相邻的三角形的中间的数是相同的
题解:dfs从左到右边,从上到下,一个一个放,并且进行判断,是否合理,如果合理就放置,反之则回溯。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int map[][]; //记录不同行的四个三角形
int n,cur; //行数和当前的种类数(也就是有多少个不同行)
int result[]; //记录已经放置的方块的
int counts[]; //记录每一种木块的个数
bool dfs(int num,int n){
if(num==n*n)return ;//找到了就爱返回true
for(int i=;i<cur;i++){//遍历每一种方块注意这里是0~~cur-1;
if(!counts[i]) continue; //如果当前种类的方块数的数目为零,则跳过
if(num%n!=){//注意这里是处理第一列的情形:因为对于第一列,没有更左边的方块需要判断,
//所以没一行的第一个不需要与左边的方块进行判断,直接跳过,这里乜嘢可以改成几个if作为判断语句
if(map[i][]!=map[result[num-]][]) //把当前的种类的方块与上一个进行计较,因为这里的上一个一定是当前左边的额
continue;
}
if(num/n!=){//这里是处理第一行的情形,因为第一行的方块不需要与上一行进行比较,0——n-1的木块都不需要判断
if(map[i][]!=map[result[num-n]][])
continue;
}
result[num]=i; //记录本次的可行的木块种类
counts[i]--; //可行则该种类的木块数目减一
if(dfs(num+,n))//继续放第num+1块,
return ;
else
counts[i]++;//如果没有找到要恢复现场,这里很重要
}
return ;
}
int main(){
int ab=;
int t=;
while(scanf("%d",&n)&&n){
if(ab)
printf("\n");
ab=;
cur=;
memset(map,,sizeof(map));
memset(counts,,sizeof(counts)) ; //注意这里的清空处理
int a,b,c,d;
for(int i=;i<n*n;i++){
bool flag=true;
scanf("%d%d%d%d",&a,&b,&c,&d);
for(int j=;j<cur;j++){
if(map[j][]==a&&map[j][]==b&&map[j][]==c&&map[j][]==d)
{
counts[j]++;
flag=false;
break;
}
} //统计相同的木块数目
if(flag){
map[cur][]=a;
map[cur][]=b;
map[cur][]=c;
map[cur][]=d;
counts[cur]++;
cur++;
}
}
if(dfs(,n)) //注意这里是从0开始的,因为你储存map的时候的下标是从0开始的
printf("Game %d: Possible\n",t++);
else
printf("Game %d: Impossible\n",t++); } }
Gnome Tetravex的更多相关文章
- ZOJ 1008 Gnome Tetravex(DFS)
Gnome Tetravex Time Limit: 10 Seconds Memory Limit: 32768 KB Hart is engaged in playing an inte ...
- [ZOJ 1008]Gnome Tetravex (dfs搜索 + 小优化)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008 题目大意:给你n*n的矩阵,每个格子里有4个三角形,分别是 ...
- ZOJ 1008 Gnome Tetravex(DFS)
题目链接 题意 : 将n*n个正方形进行排列,需要判断相邻的正方形的相邻三角形上边的数字是不是都相等. 思路 : 只知道是个深搜,一开始不知道怎么搜,后来看了题解才明白,就是说不是自己去搜,而是将给定 ...
- 1008 Gnome Tetravex
练习使用DPS的题,不知道有无别的做法,思路不复杂.形式是统计并且进行数字配对. #include <stdio.h> ][],note[],ans[]; void ini(){ int ...
- zoj 1008 Gnome Tetravex
开放式存储阵列为每平方米有几个,否则,超时-- #include <stdio.h> #include <string.h> #include <iostream> ...
- ZOJ1008 Gnome Tetravex
DFS+剪枝~ #include<bits/stdc++.h> using namespace std; ][]; int N; int cnt; ]; ]; unordered_map& ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- 如何保存gnome的linux的 会话?相当于windows下的休眠?
在关机前, 你进行的所有操作, 的集合, 就叫做你跟 linux系统 机器间的 一次 会话, 一个session. linux 可以 在关机时保存 这些session, 保存这些打开的窗口 和程序. ...
随机推荐
- [PWA] Add web app to your Home Screen
Clone: Link Modify the structure: Move css, js, image, index.html to an 'app' folder. manifest.json: ...
- Windows开启Telnet
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/4301513.html ...
- WPF中的资源简介、DynamicResource与StaticResource的区别(转)
什么叫WPF的资源(Resource)?资源是保存在可执行文件中的一种不可执行数据.在WPF的资源中,几乎可以包含图像.字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性. 也就是 ...
- 分离数据库(Detach database).
Many times, we often needs to detach our databases if we want to copy it to another database instanc ...
- mysql locktables
SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, TIMESTAMPDIFF( ...
- Java环境的安装与配置
Java环境的安装与配置 环境:Java8,win10 推荐oracle官网oracle官网https://www.oracle.com/index.html下载JDK进行安装 选择自己需要的版本下载 ...
- oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断
oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断 查询方式一: SELECT CASE WHEN (SELECT CAST(SUM(CASE ) THEN ...
- 判断奇数,java陷阱
/** 判断是否为奇数 @author husky / public class IsOdd { public static void main(String[] args) { int demo1 ...
- hbase的存储体系
一.了解hbase的存储体系. hbase的存储体系核心的有Split机制,Flush机制和Compact机制. 1.split机制 每一个hbase的table表在刚刚开始的时候,只有一个regio ...
- hdoj 1176(可转化为数塔)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissio ...