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

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

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  2. 201521123039 《java程序设计》第十周学习总结

    1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 总结:需要 ...

  3. 201521123117 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  4. Linux系统文件与目录权限管理

    Linux文件目录权限管理 一.Linux文件属性及权限 1.Linux文件及目录权限及属性说明 (1)权限及属性说明 (2)文件权限说明 三种权限说明:r 读  read w 写  write  x ...

  5. Eclipse rap 富客户端开发总结(15) :rap如何使用js

    1. 把输入的字符串当 javascript 执行 try { RWT.getResponse().getWriter().println("alert('123');"); }  ...

  6. Bootstrap栅格系统用法--Bootstrap基础

    1.栅格系统实现布局的原理 1)Bootstrap把屏幕的宽度拆分成12格(列),每一格像素的多少由设备屏幕分辨率决定,我们在开发项目的过程中不需要去指定像素或者百分比. 2)不同范围的分辨率对应不同 ...

  7. Python 浅谈注释的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是难以下咽,几乎每个字符都要咨询他,用老师的话来说,这就是山炮编程员,所以此时的我意识到写一篇关于注释程序的重要性了,因此特地的写一篇文章帮助大家 ...

  8. Javascript跳转页面和打开新窗口等方法

    1.在原来的窗体中直接跳转用onClick="window.location.href='你所要跳转的页面';" 2.在新窗体中打开页面用:onclick="window ...

  9. 深入理解计算机系统(2.7)------二进制小数和IEEE浮点标准

    整数的表示和运算我们已经讲完了,在实际应用中,整数能够解决我们大部分问题.但是某些需要精确表示的数,比如某件商品的价格,某两地之间的距离等等,我们如果用整数表示将会有很大的出入,这时候浮点数就产生了. ...

  10. Unitty 3D 贪吃蛇 今日小记 -- 碰撞

    当蛇头碰撞到蛋的时候  应该让蛋消失并且重新创建蛋. void OnTriggerEnter    可以使用这个方法 下面附有这个方法的介绍 其次需要对挂载在之上的Object  check IsTr ...