UVa225,Golygons
刘儒家翻译的走出的图形可以自交,不知道大家是怎么理解的,反正我是认为这句话的意思是告诉我允许一个点访问多次
这样是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的更多相关文章
- UVA225 Golygons 黄金图形(dfs+回溯)
剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点. 剪枝2:当前位置怎么也走不回去. 3:沿途判断障碍即可. 在oj上提交0.347s,最快的0.012s,应该有 ...
- 【习题 7-2 UVA-225】Golygons
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 暴力枚举每次走哪里就好. 用一个二维数组来判重.(数据里,要求不能经过一个点两次->但路径可以相交 然后再用一个flag数组, ...
- Uva 225 Golygons
这道题如果直接用Dfs,运气好的话是可以直接过的. 但如果要在Dfs的基础上加快速度,剪枝是必不可少的. 我的剪枝策略: 1.当前点(x,y)回到出发点至少需要 |x| +| y| 步,如果剩余的步数 ...
- uva225 回溯剪枝
这道题要剪枝,不然会超时,还有就是每次参加过的城市下次不能再参观,不然会WA. 对于障碍物的坐标我用了两种方法,第一种就是直接用STL里面的set,对于判断是否访问过直接用的count,用时960ms ...
- 习题 7-2 uva225(回溯)
题意:从(0.0)点出发,第一次走一步……第k次走k步,且每次必须转90度,不能走重复的点.求k次后回到出发点的所有情况.按最小字典序从小到大输出. 思路: 把所有坐标+220,保证其是正数,然后搜索 ...
- UVA - 225 Golygons (黄金图形)(回溯)
题意:平面有k个障碍点.从(0,0)出发,第一次走1个单位,……,第n次走n个单位,恰好回到(0,0),每次必须转弯90°,图形可以自交,但不能经过障碍点.按字典序输出所有移动序列,并输出序列总数. ...
- UVA225-Golygons(dfs)
Problem UVA225-Golygons Accept:307 Submit:3646 Time Limit: 3000 mSec Problem Description Imagine a ...
- UVa 225 黄金图形(回溯+剪枝)
https://vjudge.net/problem/UVA-225 题意:平面上有k个障碍点,从(0,0)出发,第一次走1个单位,第二次走2个单位,...第n次走n个单位,最后恰好回到(n,n).每 ...
随机推荐
- 201521123070 《JAVA程序设计》第6周学习总结
1. 本章学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123065《Java程序设计》第2周学习总结
1.本周学习总结 字符串创建后是不可变的,可以使用加号进行字符串之间的拼接. 使用for循环对字符串进行修正会不断产生新的字符串,应使用StringBuilder. 字符串内容的比较要用equal. ...
- 201521123050 《Java程序设计》第9周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避 ...
- eclipse:eclipse for java EE环境下如何配置tomcat服务器,并让tomcat服务器显示在控制台上,将Web应用部署到tomcat中
eclipse环境下如何配置tomcat 打开Eclipse,单击"Window"菜单,选择下方的"Preferences". 单击"Server& ...
- python读取外部文件
>>> pd.read_excel('c://111.xlsx') 年度排名 历史排名 电影名称 总票房 总人次 总场次 上映年份 操作 0 1 1 美人鱼 NaN -- -- 20 ...
- Servlet第三篇【request和response简介、response的常见应用】
response.request对象 Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象.和代表响应的response对象 既然request对象代表ht ...
- weblogic服务器上类或者方法找不到的解决办法
下面以eclipse-birt(报表)为例,介绍这种问题出现的原因以及解决之道: 分析比较好的见:http://developer.actuate.com/community/forum/index. ...
- jQuery中的常用内容总结(一)
jQuery中的常用内容总结(一) 前言 不好意思(✿◠‿◠),由于回家看病以及处理一些其它事情耽搁了,不然这篇博客本该上上周或者上周写的:同时闲谈几句:在这里建议各位开发的童鞋,如果有疾病尽快治 ...
- 深入理解计算机系统chapter1
---恢复内容开始--- 预处理器+编译器+汇编器+链接器=编译系统 运行hello程序 操作系统: 无论是在单核还是多核系统中,一个CPU看上去都在并发的执行多个进程,这是通过处理器在进程间切换来实 ...
- gRPC官方快速上手学习笔记(c#版)
上手前准备工作 支持操作系统:windows.OS X.Linux.实例采用.net..net core sdk. The .NET Core SDK command line tools. The ...