剪枝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. Zookeeper发布订阅之SpringBoot+Mybatis多数据源

    1.前言 数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者将数据发布到Zookeeper的一个或一系列节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中管理和数据的动 ...

  2. 洛谷P3080 [USACO13MAR]牛跑The Cow Run

    P3080 [USACO13MAR]牛跑The Cow Run 题目描述 Farmer John has forgotten to repair a hole in the fence on his ...

  3. hdu1693Eat the Trees(插头dp)

    传送门 先坑着,等啥时候会了再来填坑 不得不说思路真的是很妙啊 //minamoto #include<iostream> #include<cstdio> #include& ...

  4. 洛谷P4213 【模板】杜教筛(Sum)(杜教筛,莫比乌斯反演)

    传送门 坑着,联赛活着回来再填(死了就不填了) // luogu-judger-enable-o2 //minamoto #include<iostream> #include<cs ...

  5. 总结 Sublime Text 3 无法安装 Package Control 插件的解决办法

    Sublime Text 是一款非常好用的轻便的编辑器,可以安装很多插件,实现IDE的很多功能,着实是程序员的利器. 我安装的 Sublime Text 3 Build 3143 ,软件汉化,软件激活 ...

  6. visdom可视化pytorch训练过程

    一.前言 在深度学习模型训练的过程中,常常需要实时监听并可视化一些数据,如损失值loss,正确率acc等.在Tensorflow中,最常使用的工具非Tensorboard莫属:在Pytorch中,也有 ...

  7. vue教程6-图表

    引入 cnpm install echarts --save #在vue项目目录下安装echarts 静态折线图 linechart.js import echarts from 'echarts' ...

  8. C# Obsolete(已弃用方法属性)

    class Realization : Interface { /// <summary> /// 已弃用的方法,Obsolete第二个参数设置为true,调用此方法会产生警告并引起编译器 ...

  9. luogu P2731 骑马修栅栏 Riding the Fences

    入度为奇数的点,搜他. 最好邻接矩阵... #include<cstdio> #include<iostream> #define R register int using n ...

  10. B.Icebound and Sequence

    链接:https://ac.nowcoder.com/acm/contest/903/B 题意: Icebound hates math. But Imp loves math. One day, I ...