UVA225 Golygons 黄金图形(dfs+回溯)
剪枝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+回溯)的更多相关文章
- UVA - 225 Golygons (黄金图形)(回溯)
题意:平面有k个障碍点.从(0,0)出发,第一次走1个单位,……,第n次走n个单位,恰好回到(0,0),每次必须转弯90°,图形可以自交,但不能经过障碍点.按字典序输出所有移动序列,并输出序列总数. ...
- UVa 225 黄金图形(回溯+剪枝)
https://vjudge.net/problem/UVA-225 题意:平面上有k个障碍点,从(0,0)出发,第一次走1个单位,第二次走2个单位,...第n次走n个单位,最后恰好回到(n,n).每 ...
- 素数环(dfs+回溯)
题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...
- NOJ 1074 Hey Judge(DFS回溯)
Problem 1074: Hey Judge Time Limits: 1000 MS Memory Limits: 65536 KB 64-bit interger IO format: ...
- HDU 1016 Prime Ring Problem(经典DFS+回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU1016 Prime Ring Problem(DFS回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- uva 193 Graph Coloring(图染色 dfs回溯)
Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...
- P1074 靶形数独 dfs回溯法
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...
随机推荐
- JavaWeb_tomcat设置默认应用
在tomcat的server.xml文件中设置默认应用. 在tomcat文件目录里面的conf/server.xml文件中,在<Engine>...</Engine>中再增加一 ...
- C++11 assert/static_assert
assert assert 是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,也不具有强制性,也谈不上改善编译信息的可读性,既然是运行期检查,对性能当然是有影响的,所以经常在发行版本中 ...
- 以太坊开发教程(二) 利用truffle发布宠物商店 DAPP 到 以太坊测试环境Ropsten
1.环境安装 1) node安装 设置镜像地址: curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -下载安装 ...
- link-1-STL 标准模板库
STL(Standard Template Library,标准模版库)是C++语⾔言标准中的重要组成部分.STL以模板类和模版函数的形式为程序员提供了了各种数据结构和算法的实现,程序员吐过能够充分的 ...
- JavaScript进阶 - 第4章 跟着我的节奏走(流程控制语句)
第4章 跟着我的节奏走(流程控制语句) 4-1 做判断(if语句) if语句是基于条件成立才执行相应代码时使用的语句. 语法: if(条件) { 条件成立时执行代码} 注意:if小写,大写字母(IF) ...
- 10.使用子查询 ---SQL
利用子查询进行过滤 普通查询: SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01'; 输出▼ order_num ----------- ...
- redis之安装
redis之安装 redis redis介绍 redis是一个key-value存储系统,菲关系型数据库.和Memcached类似,他支持存储的value类型相对更多,包括字符串.列表.哈希散列表.集 ...
- Tkinter 的三大布局管理器 pack、grid 和 place用法汇总
学习python的tkinter免不了要对各个组件进行位置的排放与设定,常用的布局管理器有grid,pack和place.这三种均用于同一父组件下的组件布局,但是也是有区别的,先看下他们各自的含义吧. ...
- NET Core 与 Vue.js 服务端渲染
NET Core 与 Vue.js 服务端渲染 http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/原作者: ...
- VS Code开发调试.NET Core 2.0
VS Code开发调试.NET Core 2.0 使用VS Code 从零开始开发调试.NET Core 2.0.无需安装VS 2017 15.3+即可开发调试.NET Core 2.0应用. VS ...