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 黄金图形(回溯+剪枝)的更多相关文章

  1. 回溯剪枝,dfs,bfs

    dfs: 给定一个整数n,将数字1~n排成一排,将会有很多种排列方法. 现在,请你按照字典序将所有的排列方法输出. 输入格式 共一行,包含一个整数n. 输出格式 按字典序输出所有排列方案,每个方案占一 ...

  2. HDU 5113 Black And White 回溯+剪枝

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5113 Black And White Time Limit: 2000/2000 MS (Java/ ...

  3. HDU 2553 N皇后问题(回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...

  4. HDU1010 Tempter of the Bone(回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398734 题意: 输入一个 N * M的迷宫,这个迷宫里'S'代表小狗的位置,'X'代表陷阱,‘D ...

  5. HDU1016 Prime Ring Problem (回溯 + 剪枝)

    本文链接:http://www.cnblogs.com/Ash-ly/p/5398684.html 题意: 给你一个数字N(N <= 20),要求你把这N个数组成一个环,环内的数字不能重复,左右 ...

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

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

  7. UVa 208 - Firetruck 回溯+剪枝 数据

    题意:构造出一张图,给出一个点,字典序输出所有从1到该点的路径. 裸搜会超时的题目,其实题目的数据特地设计得让图稠密但起点和终点却不相连,所以直接搜索过去会超时. 只要判断下起点和终点能不能相连就行了 ...

  8. UVA225 Golygons 黄金图形(dfs+回溯)

    剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点. 剪枝2:当前位置怎么也走不回去. 3:沿途判断障碍即可. 在oj上提交0.347s,最快的0.012s,应该有 ...

  9. [算法专题] 深度优先搜索&回溯剪枝

    1. Palindrome Partitioning https://leetcode.com/problems/palindrome-partitioning/ Given a string s, ...

随机推荐

  1. 解决PHPStorm经常卡顿现象 调整内存限制

    https://www.jisec.com/other/451.html 为什么调整内存? 最近发现PHPstorm在打开一些大点的js, html文件时,会非常的卡顿,这个主要的原因是因为设置的内存 ...

  2. [LeetCode] 104. Maximum Depth of Binary Tree_Easy tag: DFS

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  3. reduce()方法

    1.reduce()方法概述 reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作:第二个参数则是传入的初始值,这个初始值用于单个数组项的操作.需要注意的是,reduce ...

  4. 如何实现parseFloat保留小数点后2位

    Number.toPrecision(2);function toPrecision ( [precision : Number] ) : String参数 precision 可选项.有效位数.值必 ...

  5. ModelSim使用$display查看变量值和输出信息

    打开ModelSim,新建工程->新建Verilog文件demo.v 输入文件内容 module demo(); reg[3:0] a,b; initial begin $display(&qu ...

  6. Bus memory attribute

    根据程序的局部性原理,在主存与CPU之间设置的一个高速的容量较小的存储器,叫做cache. ARM cache架构由cache存储器和写缓冲器(write-buffer)组成.其中Write_buff ...

  7. SV中的task和function

    SV中class的properties和methods默认都是public的,但是可以声明为local和protected. 一个properties声明为local类型的,则只在该class中的me ...

  8. http-equiv制作跳转欢迎页面

    做网站嘛,没有个欢迎页面肿么能忍? 要忽悠下浏览者的嘛. 然后此处省略一万字... 目的:不需要其他的脚本,直接在meta中控制时间,跳转页面 原理很简单: < meta http-equiv= ...

  9. maven intall在target文件夹中自动生成的war包部署服务器时缺斤少两

    1.问题描述,本地改动特别大或者升级系统操作,打war包部署服务器上程序时候,页面或者后台总是报错,原因就是比本地少东西. 2.问题排查解决:maven clean然后maven intall在tar ...

  10. click 在网页测试手机模式下无效,不能执行。调成非手机模式即可

    click  在网页测试手机模式下无效,不能执行. 调成非手机模式即可