UVa 225 黄金图形(回溯+剪枝)
https://vjudge.net/problem/UVA-225
题意:
平面上有k个障碍点,从(0,0)出发,第一次走1个单位,第二次走2个单位,...第n次走n个单位,最后恰好回到(n,n)。每次必须转弯90°。
思路:
首先要注意的是坐标有可能是负的,所以在这里我们可以障碍点的坐标值+105变成正值,原点也就变成了(105,105),为什么是加105呢?因为我们最多走20步,最远是310,所以如果大于了105,之后肯定就回不来了,所以只需要加上105就可以了。
然后就是各种剪枝了,比较重要的就是当前距离大于剩余可走距离时,之后不管怎么走,肯定是回不到原点了,此时剪枝。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std; const int maxn = ;
int n, k, cnt;
const int dir[][] = { { , }, { , }, { , - }, { -, } };
const char dict[] = "ensw";
int G[*maxn][*maxn];
int vis[*maxn][*maxn];
int path[maxn];
int sum[]; void init()
{
//计算步数
sum[] = ;
for (int i = ; i <= ; i++)
sum[i] = sum[i - ] + i;
} bool judge(int x, int y,int d)
{
int dis = abs(x - ) + abs(y - );
if (dis > sum[n] - sum[d]) return false;
return true;
} void dfs(int f, int d, int x, int y)
{
if (d == n)
{
if (x!= || y!=) return;
for (int i = ; i < n; i++)
printf("%c", dict[path[i]]);
printf("\n");
cnt++;
return;
} for (int k = ; k < ; k++)
{
if (k == f || k + f == ) continue;
int dx = x;
int dy = y;
int flag = ;
for (int i = ; i <= d + ; i++)
{
dx = dx + dir[k][];
dy = dy + dir[k][];
if (G[dx][dy]||!judge(dx,dy,d)) { flag = ; break; }
}
if (flag && !vis[dx][dy])
{
vis[dx][dy] = ;
path[d] = k;
dfs(k, d + , dx, dy);
vis[dx][dy] = ;
}
}
return;
} int main()
{
//ios::sync_with_stdio(false);
//freopen("D:\\txt.txt", "r", stdin);
int T;
init();
scanf("%d", &T);
while (T--)
{
scanf("%d%d",&n, &k);
memset(G, , sizeof(G));
memset(vis, , sizeof(vis));
for (int i = ; i < k; i++)
{
int a, b;
scanf("%d%d", &a, &b);
a += ;
b += ;
if (a>= && b>=) G[a][b] = ;
}
cnt = ;
dfs(-, , , );
printf("Found %d golygon(s).\n\n", cnt);
}
}
UVa 225 黄金图形(回溯+剪枝)的更多相关文章
- 回溯剪枝,dfs,bfs
dfs: 给定一个整数n,将数字1~n排成一排,将会有很多种排列方法. 现在,请你按照字典序将所有的排列方法输出. 输入格式 共一行,包含一个整数n. 输出格式 按字典序输出所有排列方案,每个方案占一 ...
- HDU 5113 Black And White 回溯+剪枝
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5113 Black And White Time Limit: 2000/2000 MS (Java/ ...
- HDU 2553 N皇后问题(回溯 + 剪枝)
本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...
- HDU1010 Tempter of the Bone(回溯 + 剪枝)
本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398734 题意: 输入一个 N * M的迷宫,这个迷宫里'S'代表小狗的位置,'X'代表陷阱,‘D ...
- HDU1016 Prime Ring Problem (回溯 + 剪枝)
本文链接:http://www.cnblogs.com/Ash-ly/p/5398684.html 题意: 给你一个数字N(N <= 20),要求你把这N个数组成一个环,环内的数字不能重复,左右 ...
- UVA - 225 Golygons (黄金图形)(回溯)
题意:平面有k个障碍点.从(0,0)出发,第一次走1个单位,……,第n次走n个单位,恰好回到(0,0),每次必须转弯90°,图形可以自交,但不能经过障碍点.按字典序输出所有移动序列,并输出序列总数. ...
- UVa 208 - Firetruck 回溯+剪枝 数据
题意:构造出一张图,给出一个点,字典序输出所有从1到该点的路径. 裸搜会超时的题目,其实题目的数据特地设计得让图稠密但起点和终点却不相连,所以直接搜索过去会超时. 只要判断下起点和终点能不能相连就行了 ...
- UVA225 Golygons 黄金图形(dfs+回溯)
剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点. 剪枝2:当前位置怎么也走不回去. 3:沿途判断障碍即可. 在oj上提交0.347s,最快的0.012s,应该有 ...
- [算法专题] 深度优先搜索&回溯剪枝
1. Palindrome Partitioning https://leetcode.com/problems/palindrome-partitioning/ Given a string s, ...
随机推荐
- Spark Storage(二) 集群下的broadcast
Broadcast 简单来说就是将数据从一个节点复制到其他各个节点,常见用于数据复制到节点本地用于计算,在前面一章中讨论过Storage模块中BlockManager,Block既可以保存在内存中,也 ...
- [py][mx]operation模型设计
用户表 UserMesasage 用户消息 UserFavorite 用户收藏 UserAsk 用户咨询 UserCourse 用户学习的课程 CourseComments 用户评论 收藏有3种类型 ...
- mysql 开启慢查询
linux启用MySQL慢查询 vim /etc/my.cnf [mysqld] slow-query-log = on slow_query_log_file = /var/log/slow_que ...
- openstack部署心得
官方文档:https://docs.openstack.org/ 个别版本有中文 不要轻易尝试最新版本 新版本刚推出一般存在不少BUG或者文档没有更新,按照文档配置就是不能成功.推荐尝试最新版本的上一 ...
- svn 常见问题记录
One or more files are in a conflicted state 情景:A组员新增文件并提交,B组员更新出现如下图情况. 解决方案:直接拷贝到B组员工作区.
- windows配置承载网络的一个批处理程序
@rem 这是windows中创建承载网络的相关命令title wifi热点@echo off set ssid=abcdeset key=123456789 :beginclsecho ------ ...
- 浏览器测试string是否为图片
在浏览器中直接打如下代码.其中adcd为图片转成的string data:image/jpeg;base64,abcd
- 蓝牙协议 HFP,HSP,A2DP,A2DP_CT,A2DP_TG,AVRCP,OPP,PBAP,SPP,FTP,TP,DTMF,DUN,SDP
简介: HSP(手机规格)– 提供手机(移动电话)与耳机之间通信所需的基本功能. HFP(免提规格)– 在 HSP 的基础上增加了某些扩展功能,原来只用于从固定车载免提装置来控制移动电话. A2DP( ...
- python如何序列化json数据
使用json模块提供的loads方法和dumps方法,可以很方便的载入和读取json数据格式.而在具体实际应用中,我们使用python数据格式是 string.list 或dict等,这类格式如何直接 ...
- python之路----包
包 包是一种通过使用‘.模块名’来组织python模块名称空间的方式. 1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警 ...