[ZOJ 1008]Gnome Tetravex (dfs搜索 + 小优化)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008
题目大意:给你n*n的矩阵,每个格子里有4个三角形,分别是上右下左,每个三角形里面标记了数字,问你能否通过移动这n*n个格子,使得相邻两个三角形具有相同的数字?
dfs暴搜,dfs(x,y)代表当前要放(x,y)这个位置。
然后枚举给定的每个格子。
如果说可以放,就dfs下一个格子。
这一道题需要把相同的格子压缩起来,也就是说为了节省时间,可以记录相同的格子出现的次数。
然后对于这不同种的格子去dfs。
如果不这样做会超时。
这算是一种优化方法吧。涨姿势了。
#include <cstdio>
#include <cstdlib>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <vector>
#include <map>
#include <set>
#include <iterator>
#include <functional>
#include <cmath>
#include <numeric>
#include <ctime>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define PB push_back
#define MP make_pair
#define SZ size()
#define CL clear()
#define AA first
#define BB second
#define EPS 1e-8
#define ZERO(x) memset((x),0,sizeof(x))
const int INF = ~0U>>;
const double PI = acos(-1.0); int n;
int now[][];
bool vis[];
int ptr;
bool flag; struct Node{
int top,right,bottom,left;
int num;
bool operator==(const Node& b) const{
return top==b.top&&right==b.right&&bottom==b.bottom&&left==b.left;
}
Node(int t=,int r=,int b=,int l=):top(t),right(r),bottom(b),left(l){}
};
Node mp[]; void dfs(int x,int y){
if(flag) return;
if( x==n || y==n ){
flag = true;
return;
}
for(int i=;i<ptr;i++){
if( mp[i].num&&
(x==||mp[now[x-][y]].bottom==mp[i].top)
&&(y==||mp[now[x][y-]].right==mp[i].left) ){
now[x][y] = i;
mp[i].num--;
if( y+<n ) dfs(x,y+);
else dfs(x+,);
mp[i].num++;
}
}
} int main(){
int kase = ;
while(scanf("%d",&n),n){
ptr = ;
for(int i=;i<n*n;i++){
int t,r,b,l;
scanf("%d%d%d%d",&t,&r,&b,&l);
bool appear = ;
for(int j=;j<ptr;j++){
if(Node(t,r,b,l)==mp[j]){
mp[j].num++;
appear = ;
}
}
if(!appear){
mp[ptr] = Node(t,r,b,l);
mp[ptr++].num = ;
}
} flag = false;
dfs(,); if(kase!=) puts("");
printf("Game %d: ",kase++);
puts(flag?"Possible":"Impossible");
}
return ;
}
[ZOJ 1008]Gnome Tetravex (dfs搜索 + 小优化)的更多相关文章
- 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)
题目链接 题意 : 将n*n个正方形进行排列,需要判断相邻的正方形的相邻三角形上边的数字是不是都相等. 思路 : 只知道是个深搜,一开始不知道怎么搜,后来看了题解才明白,就是说不是自己去搜,而是将给定 ...
- zoj 1008 Gnome Tetravex
开放式存储阵列为每平方米有几个,否则,超时-- #include <stdio.h> #include <string.h> #include <iostream> ...
- [ZOJ 1003] Crashing Balloon (dfs搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3 题目大意:给你a,b两个数,问当b由约数1到100组成时,a能否由其 ...
- 1008 Gnome Tetravex
练习使用DPS的题,不知道有无别的做法,思路不复杂.形式是统计并且进行数字配对. #include <stdio.h> ][],note[],ans[]; void ini(){ int ...
- nyist oj 19 擅长排列的小明(dfs搜索+STL)
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 小明十分聪明.并且十分擅长排列计算.比方给小明一个数字5,他能立马给出1-5按字典序的全排列,假设你想 ...
- [ZOJ 1011] NTA (dfs搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1011 题目大意:在一棵树上,给你起始状态,问你能否到达终止状态. ...
- hihocoder 1050 树中的最长路(动态规划,dfs搜索)
hihocoder 1050 树中的最长路(动态规划,dfs搜索) Description 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅 ...
- 搜索实时个性化模型——基于FTRL和个性化推荐的搜索排序优化
本文来自网易云社区 作者:穆学锋 简介:传统的搜索个性化做法是定义个性化的标签,将用户和商品通过个性化标签关联起来,在搜索时进行匹配.传统做法的用户特征基本是离线计算获得,不够实时:个性化标签虽然具有 ...
随机推荐
- android layout_weight 使用总结
今天在使用androidlayout_weight的时候遇到点奇怪的问题,就上网查了一下,发现这篇文章很详细,就转了过来,谢谢分享者,写的很详细. 在 android开发中LinearLayout很 ...
- String的compareTo()方法返回值
compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的 差值,如果第一个字符和参数的第一个字符相等,则以第二 ...
- Maven 如何为不同的环境打包 —— 开发、测试和生产环境
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次 ...
- Oracle获取AWR和ASH
-- 找到指定的snap select snap_id, max(sample_time) from sys.wrh$_active_session_history group by snap_id ...
- 【Reporting Services 报表开发】— 交互式报表
我们知道,界面是人与系统间的对话方式,当使用者面对的是冷冰冰的界面,不但会造成使用者对于系统的热情减低,也会因为不便而产生诸多抱怨.尤其像报表时企业内几乎每日都会使用到的工具,因此,如何让使用者可以再 ...
- matlab语言基础
(一)常用命令 清空命令窗口:clc 清空工作空间:clear 打开editor:edit 查看函数的帮助信息:help 函数名 让命令窗口信息紧凑显示:format compact (二)变量与常 ...
- rsync配置中的auth error,一个隐秘的错误
我们都知道rsync是linux自带的功能强大的文件同步协议. 为了做免密码文件同步,所以,有多种配置.但是种种配置中,可能会遇到一个让人很纠结的问题,那就是安全认证错误的问题! 这个配置,是基于rs ...
- 记一下一些比较有意思的第三方API
野狗,第三方后端通信用的:https://www.wilddog.com/ 花瓣网,用来做设计的:http://huaban.com/ Ping++,聚合支付接口:https://www.pingxx ...
- 【转】关于 hashCode() 你需要了解的 3 件事
在 Java 中,每一个对象都有一个容易理解但是仍然有时候被遗忘或者被误用的 hashCode 方法.这里有3件事情要时刻牢记以避免常见的陷阱. 一个对象的哈希码允许算法和数据结构将对象放入隔间,就象 ...
- elixir学习
安装 brew install elixir atom配置 language-elixir atom-elixir elixir的shell iex :erlang.system_info(:otp_ ...