刘儒家翻译的走出的图形可以自交,不知道大家是怎么理解的,反正我是认为这句话的意思是告诉我允许一个点访问多次

这样是WA的,n=15和n=16时多输出很多数据,应该是不允许自交,也就是不允许一个点访问多次。(找这个错花了我整整一下午的时间,总之找出来了还是蛮开心的)

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#define maxn 1000+10
#define d 500
using namespace std;
int map[maxn][maxn],n,k,ans[],tot,vst[maxn][maxn];
int init(){
memset(map,,sizeof(map));
memset(ans,,sizeof(ans));
memset(vst,,sizeof(vst));
tot=;
cin>>n>>k;
int x,y;
for (int i=;i<=k;i++){
cin>>x>>y;
x+=d;y+=d;
if (x>=&&y>=&&x<maxn&&y<maxn)map[x][y]=-;
}
}
int ok(int x,int y,int endx,int endy,int f){
switch (f){
case :
for (int i=x;i<=endx;i++)
if(map[i][y]) return ;
break;
case :
for (int i=y;i<=endy;i++)
if(map[x][i]) return ;
break;
case :
for (int i=endy;i<=y;i++)
if(map[x][i]) return ;
break;
case :
for (int i=endx;i<=x;i++)
if(map[i][y]) return ;
break;
}
return ;
}
int printf(){
tot++;
for (int i=;i<=n;i++){
switch(ans[i]){
case :cout<<"e";break;
case :cout<<"n";break;
case :cout<<"s";break;
case :cout<<"w";break;
}
}
cout<<endl;
}
int dfs(int x,int y,int f,int cnt){
int endx,endy;
switch (f){
case :endx=x+cnt;endy=y;break;
case :endx=x;endy=y+cnt;break;
case :endx=x;endy=y-cnt;break;
case :endx=x-cnt;endy=y;break;
}
ans[cnt]=f;
if (!ok(x,y,endx,endy,f)) return ;
if (cnt!=n&&endx==d&&endy==d) return ;
if (vst[endx][endy]) return ;
if (cnt==n&&endx==d&&endy==d){
printf();
return ;
}
if(cnt==n) return ;
switch (f){
case :
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
break;
case :
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
break;
case :
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
break;
case :
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
vst[endx][endy]=;
dfs(endx,endy,,cnt+);
vst[endx][endy]=;
break;
}
}
int main()
{
int T;
cin>>T;
while (T--) {
init();
for (int w=;w<=;w++)
dfs(d,d,w,);
cout<<"Found "<<tot<<" golygon(s)."<<endl;
cout<<endl;
}
}

UVa225,Golygons的更多相关文章

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

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

  2. 【习题 7-2 UVA-225】Golygons

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 暴力枚举每次走哪里就好. 用一个二维数组来判重.(数据里,要求不能经过一个点两次->但路径可以相交 然后再用一个flag数组, ...

  3. Uva 225 Golygons

    这道题如果直接用Dfs,运气好的话是可以直接过的. 但如果要在Dfs的基础上加快速度,剪枝是必不可少的. 我的剪枝策略: 1.当前点(x,y)回到出发点至少需要 |x| +| y| 步,如果剩余的步数 ...

  4. uva225 回溯剪枝

    这道题要剪枝,不然会超时,还有就是每次参加过的城市下次不能再参观,不然会WA. 对于障碍物的坐标我用了两种方法,第一种就是直接用STL里面的set,对于判断是否访问过直接用的count,用时960ms ...

  5. 习题 7-2 uva225(回溯)

    题意:从(0.0)点出发,第一次走一步……第k次走k步,且每次必须转90度,不能走重复的点.求k次后回到出发点的所有情况.按最小字典序从小到大输出. 思路: 把所有坐标+220,保证其是正数,然后搜索 ...

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

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

  7. UVA225-Golygons(dfs)

    Problem UVA225-Golygons Accept:307  Submit:3646 Time Limit: 3000 mSec  Problem Description Imagine a ...

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

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

随机推荐

  1. 201521123114 《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1.代码阅读 以上代码可否编译通过?哪里会出错?为什么?尝试改正? 如果创建3个Test1对象,有内存中有几个i,几个j?请分析原因? 不能编译通过,Test1g ...

  2. java课程设计-表达式运算(团队博客)

    1 团队课程设计博客 1 团队名称.团队成员介绍 团队名称 奔跑吧土拨鼠 团队成员 洪亚文 201521123065 网络1513 郑晓丽 201521123066 网络1513 2 项目git地址 ...

  3. npm run build生成路径问题

    vue项目中可以使用npm run build 命令生成静态文件夹dist,开发者可以直接点击dist文件夹下面的index.html问价来访问自己的项目,但是用vue-cli生成的项目,当运行npm ...

  4. 原型那些事 - JavaScript深入浅出(三)

    前两次总结了JavaScript中的基本数据类型(值类型<引用类型>,引用类型<复杂值>)以及他们在内存中的存储,对内存空间有了一个简单的了解,以及第二次总结了this深入浅出 ...

  5. Linux Expect自动化交互脚本简介

    相关资料 维基百科:Expect SourceForge:The Expect Home Page TCL脚本言语简介 由于Expect是建立在TCL语言基础上的一个工具,因此首先检查一些TCL常见语 ...

  6. wget下载整个网站

    wget下载整个网站wget下载整个网站可以使用下面的命令 wget -r -p -k -np http://hi.baidu.com/phps , -r 表示递归下载,会下载所有的链接,不过要注意的 ...

  7. [js高手之路] html5 canvas系列教程 - 状态详解(save与restore)

    本文内容与路径([js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解)是canvas中比较重要的概念.掌握理解他们是做出复杂canvas动 ...

  8. UI自动化测试(二)浏览器操作及对元素的定位方法(xpath定位和css定位详解)

    Selenium下的Webdriver工具支持FireFox(geckodriver). IE(InternetExplorerDriver).Chrome(ChromeDriver). Opera( ...

  9. poj3070矩阵快速幂

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7752   Accepted: 5501 Descrip ...

  10. 正确使用Exception异常对象

    一.异常的构成 new Exception() 创建异常对象 throw 抛出异常对象(主要性能损耗位置) try{}catch{} 捕捉异常对象 C#里面异常对象分为两个子类ApplicationE ...