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

这样是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. 201521123035《Java程序设计》第六周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  2. 201521123097《Java程序设计》第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 在本周的学习中,我知道了在类的定义里,还学习到了抽象类以及抽象方法的使用格式. 2. 书面作 ...

  3. 201521123088《Java程序设计》第13周学习总结

    1.本周学习总结 2.书面作业 1. 网络基础1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? ping cec. ...

  4. Java课程设计---团队博客

    课设题目:购物车系统 题目要求: 1.先建立一个文本文件,定义出自己想要的商品.//也可用数据库以商品编号:商品名称:商品品牌:价格作为文件的内容,中间要求用分号或者分割 2.编写程序,定义一个商品类 ...

  5. java课程设计——猜数游戏个人博客

    1.团队课程设计链接 团队博客:http://www.cnblogs.com/springbreezemiles/p/7064135.html 2.个人负责模块 猜数部分的算法及代码实现. 3.自己的 ...

  6. python之socket编程------粘包

    一.粘包 什么是粘包 只有TCP只有粘包现象,UDP永远不会粘包 所谓粘包问题主要还是因为接收方不知道之间的界限,不知道一次性提取多少字节的数据所造成的 两种情况发生粘包: 1.发送端需要等缓冲区满才 ...

  7. 命令行的目录栈(pushd指令与popd指令)

    在命令行下经常需要切换目录,通常的做法是手打目录名,而如果有时候我们需要临时离开一个目录去操作什么,过会再回来,重新打一次目录想必是很麻烦的,这时候就可以用目录栈了,直接pushd 目录,然后就放心的 ...

  8. CSS3的颜色渐变效果

    在 animate.css寻找自己想要的动态效果,看到标题Animate.css和按钮Animate it的颜色在逐渐变化,觉得蛮有趣的,把控制变化的相关代码扒了下来,自己分析实现一波. 一开始认为使 ...

  9. ubuntu下程序员常用命令大全

    一.ubuntu下用命令查询系统版本 1.在终端中执行下列指令: cat /etc/issue 该命令可查看当前正在运行的ubuntu的版本号. 效果如图: 2.使用 lsb_release 命令也可 ...

  10. 这家IT教育公司太拼了:毕业生找不到工作就全额退学费!

    乐橙谷为了让更多的学生有工作,有高薪工作,已经决定尝试一种更刺激的游戏规则:完成课时的学员如果毕业找不到工作,公司将全额退还学费.这家公司秉承着自己的使命:以尊重的文化,敬畏的心态去努力帮助每个学生实 ...