剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点。

剪枝2:当前位置怎么也走不回去。

3:沿途判断障碍即可。

在oj上提交0.347s,最快的0.012s,应该有更好的做法。

#include<bits/stdc++.h>

const char *bin = "ensw";
const int dx[] = {,, ,-};
const int dy[] = {,,-, }; const int maxn = ;//1+...20
const int o = ;
const int N = ;
const int nxt_dir[][] = {{,},{,},{,},{,},{,,,}};
const int deg[] = {,,,,};
int vis[maxn][maxn];
int n;
int sum[N];
int left[N];
int path[N];
int cnt;
void dfs(int x,int y,int d,int dir)
{
if(d++ == n ){
if(x == o && y == o){
for(int i = ; i < n; i++){
printf("%c",bin[path[i]]);
}
putchar('\n');
cnt++;
}
return ;
}
for(int i = ; i < deg[dir]; i++){
int j = nxt_dir[dir][i];
int nx = x+dx[j]*d, ny = y+dy[j]*d;
if(vis[nx][ny]) continue;
if(abs(nx-o) + abs(ny-o) > left[d]) continue;
bool flag = false;
if(j == || j == ){
for(int tx = x+dx[j]; tx != nx ; tx+=dx[j]){
if(!~vis[tx][y]) {flag = true; break;}
}
}else {
for(int ty = y+dy[j]; ty != ny ; ty+=dy[j]){
if(!~vis[x][ty]) {flag = true; break;}
}
}
if(flag) continue;
path[d-] = j;
vis[nx][ny] = ;
dfs(nx,ny,d,j);
vis[nx][ny] = ;
}
} int main()
{
// freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
for(int i = ; i < N; i++)
sum[i] = sum[i-]+i;
while(T--){
int k;
scanf("%d%d",&n,&k);
if(((n>>)&)^(n&)) { printf("Found 0 golygon(s).\n\n"); continue; }
int tx,ty;
memset(vis,,sizeof(vis));
for(int i = ; i < k; i++){
scanf("%d%d",&tx,&ty);
if(abs(tx)<o && abs(ty)<o ) vis[tx+o][ty+o] = -;
}
for(int i = ; i < n; i++)
left[i] = sum[n] - sum[i];
cnt = ;
dfs(o,o,,);
printf("Found %d golygon(s).\n\n",cnt);
}
return ;
}

UVA225 Golygons 黄金图形(dfs+回溯)的更多相关文章

  1. UVA - 225 Golygons (黄金图形)(回溯)

    题意:平面有k个障碍点.从(0,0)出发,第一次走1个单位,……,第n次走n个单位,恰好回到(0,0),每次必须转弯90°,图形可以自交,但不能经过障碍点.按字典序输出所有移动序列,并输出序列总数. ...

  2. UVa 225 黄金图形(回溯+剪枝)

    https://vjudge.net/problem/UVA-225 题意:平面上有k个障碍点,从(0,0)出发,第一次走1个单位,第二次走2个单位,...第n次走n个单位,最后恰好回到(n,n).每 ...

  3. 素数环(dfs+回溯)

    题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...

  4. NOJ 1074 Hey Judge(DFS回溯)

    Problem 1074: Hey Judge Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format: ...

  5. HDU 1016 Prime Ring Problem(经典DFS+回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU1016 Prime Ring Problem(DFS回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. uva 193 Graph Coloring(图染色 dfs回溯)

    Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...

  9. P1074 靶形数独 dfs回溯法

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

随机推荐

  1. 1. md5 collision(50)

    md5 collision(50)      ------南京邮电大学ctf: http://chinalover.sinaapp.com/web19/ 发现了一串代码 <?php $md51 ...

  2. 使用Postman测试请求

    Postman是什么 在开发或者调试网络程序或者是网页B/S模式的程序的时候,需要一些方法来跟踪网页请求,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具. 网页调试工具Postm ...

  3. Oracle判断某个表是否存在的方法

    在SQL中,我们常常使用if exists来判断一个表或某个对象是否存在,例如:  IF EXISTS (SELECT * FROM sys.tables WHERE name = 'CODE_BMD ...

  4. 代码修改shader Properties uniform变量

    2.4 Shader的数据接口:属性和 uniform变量     如果我们想设定一个特定的值到Shader,即为了在实例化Shader为Material时,可以通过为属性赋值达到创建具体对象的目的, ...

  5. 关于c语言中的字符串的问题

      静态数组,动态数组,链表是c语言中处理存储数据最基本的三种方式. 1.静态数组,你先定好大小,直接赋值即可,不要超过定义的长度. 2.动态分配数组,在执行的时候,输入要分的内存大小,然后p=(vo ...

  6. 如何在VMware workstation上创建Linux虚拟机

    由于需要使用Linux虚拟机部署Hadoop集群,故在win10系统上安装了VMware workstation 14,现将介绍如何在VMware workstation上创建Linux虚拟机.下面以 ...

  7. JAVA编写的断点续传小程序

    上了一周的课,今天终于可以休息了,太棒了,今天闲着无聊使用java语言写了一个断点续传的小程序来分享给大家, 首先要下载个用于网络请求的框架:我这里给出地址,是用的Apache的HttpClient: ...

  8. 基于SSM搭建网站实现增删改查

    网站源码地址:https://github.com/MyCreazy/BasicOperateWebSite.git 使用maven搭建网站的时候,记得选用war包格式,有时候maven包没有引用进来 ...

  9. 服务器宕机,mysql无法启动,job for mysql.service failed because the process exited with error code,数据库备份与恢复

    [问题现象] 服务器在运行过程中,因人为意外导致电源被拔,服务器宕机,mysql重启不成功,报错如下 根据提示,输入systemctl status mysql.service和journalctl ...

  10. EOS帐户交易的构建命令

    EOS版本:4.0   系统:Ubuntu 16.04 LTS   1.创建两对密匙   cleos create key   Private key:5JeTwSwKfpVRHGLqysakTXfk ...