【习题 7-2 UVA-225】Golygons
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
暴力枚举每次走哪里就好。
用一个二维数组来判重。(数据里,要求不能经过一个点两次->但路径可以相交
然后再用一个flag数组,来判断这个点能不能走。
【代码】
/*
1.Shoud it use long long ?
2.Have you ever test several sample(at least therr) yourself?
3.Can you promise that the solution is right? At least,the main ideal
4.use the puts("") or putchar() or printf and such things?
5.init the used array or any value?
6.use error MAX_VALUE?
7.use scanf instead of cin/cout?
8.whatch out the detail input require
*/
/*
一定在这里写完思路再敲代码!!!
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 400;
const int O = 200;
const int dx[4] = {1,0,0,-1};
const int dy[4] = {0,1,-1,0};
const char dir[4] = {'e','n','s','w'};
int to[300],a[N],n,ans;
vector<int> g[300];
int flag[N+10][N+10];
int vis[N+10][N+10];
void init(){
to['e'] = 0;to['n'] = 1;to['s'] = 2;to['w'] = 3;
g['e'].push_back('n');g['e'].push_back('s');
g['n'].push_back('e');g['n'].push_back('w');
g['s'].push_back('e');g['s'].push_back('w');
g['w'].push_back('n');g['w'].push_back('s');
}
void dfs(int dep,int x,int y,int pre){
if (vis[O+x][O+y]) return;
vis[O+x][O+y] = 1;
if (dep==n){
if (x==0 && y==0){
ans++;
for (int i = 1;i <= dep;i++) cout << dir[a[i]];
cout << endl;
}
vis[O+x][O+y] = 0;
return;
}
for (int i = 0;i < (int) g[pre].size();i++){
int tx = dx[to[g[pre][i]]],ty = dy[to[g[pre][i]]];
bool ok = true;
for (int j = 1;j <= dep+1;j++){
int nx = x + tx*j,ny = y + ty*j;
if (flag[O+nx][O+ny]==1){
ok = false;
break;
}
if (j==(dep+1)) tx = nx,ty = ny;
}
if (!ok) continue;
a[dep+1] = to[g[pre][i]];
dfs(dep+1,tx,ty,g[pre][i]);
}
vis[O+x][O+y] = 0;
}
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
init();
int T;
cin >> T;
while (T--){
memset(flag,0,sizeof flag);
memset(vis,0,sizeof vis);
ans = 0;
cin >> n;
int k;
cin >> k;
while (k--){
int x,y;
cin >> x >> y;
flag[O+x][O+y] = 1;
}
for (int i = 0;i < 4;i++){
if (flag[O+0][O+0] || flag[O+dx[i]][O+dy[i]]) continue;
a[1] = i;
dfs(1,dx[i],dy[i],dir[i]);
}
cout <<"Found "<<ans<<" golygon(s)."<<endl<<endl;
}
return 0;
}
【习题 7-2 UVA-225】Golygons的更多相关文章
- Uva 225 Golygons
这道题如果直接用Dfs,运气好的话是可以直接过的. 但如果要在Dfs的基础上加快速度,剪枝是必不可少的. 我的剪枝策略: 1.当前点(x,y)回到出发点至少需要 |x| +| y| 步,如果剩余的步数 ...
- UVA - 225 Golygons (黄金图形)(回溯)
题意:平面有k个障碍点.从(0,0)出发,第一次走1个单位,……,第n次走n个单位,恰好回到(0,0),每次必须转弯90°,图形可以自交,但不能经过障碍点.按字典序输出所有移动序列,并输出序列总数. ...
- UVa 225 黄金图形(回溯+剪枝)
https://vjudge.net/problem/UVA-225 题意:平面上有k个障碍点,从(0,0)出发,第一次走1个单位,第二次走2个单位,...第n次走n个单位,最后恰好回到(n,n).每 ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- ACM训练计划建议(转)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- 动态规划 Dynamic Programming 学习笔记
文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...
- UVa第五章STL应用 习题((解题报告))具体!
例题5--9 数据库 Database UVa 1592 #include<iostream> #include<stdio.h> #include<string.h&g ...
- UVa 1600 Patrol Robot (习题 6-5)
传送门: https://uva.onlinejudge.org/external/16/1600.pdf 多状态广搜 网上题解: 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰 ...
- UVa 536 Tree Recovery | GOJ 1077 Post-order (习题 6-3)
传送门1: https://uva.onlinejudge.org/external/5/536.pdf 传送门2: http://acm.gdufe.edu.cn/Problem/read/id/1 ...
- UVa 12100 Printer Queue (习题 5-7)
传送门:https://uva.onlinejudge.org/external/121/12100.pdf 题意:队列中待打印的任务(1 <= n <= 100)带有优先级(1-9), ...
随机推荐
- ReactNative之Flux框架的使用
概述 流程图 项目结构 View Components actions Dispatcher Stores 感谢 概述 React Native 能够说非常火,非常多bat的项目都在使用.不用发版就能 ...
- centos7 nginx搭建及其反向代理
摘要:nginx反向代理的原理:外部通过ip加端口访问nginx,nginx接收到外部请求,通过ip解析访问内部服务器,内部服务器再将数据传回Nginx服务器,而Nginx再把数据传回给外部客户机. ...
- 巧用Linux 架设TFTP Server备份路由器的配置文件
本文首发<网管员世界> 转载本文站点: ChinaITLAB TFTP (普通文件传输协议或一般文件传输协议) 大家一定记得在2003年8月12日全球爆发冲击波(Worm.Blaster ...
- Servlet之doPost获取表单参数
/** * 获取表单参数 */ private void readForm() { // TODO Auto-generated method stub Enumeration e = request ...
- 不允许 ASSIGNMENT 语句中包含 FOR XML 子句。
DECLARE @guidList NVARCHAR(max) SELECT @guidList=( CAST(OrderGUID AS nvarchar(max)) +',') FROM Order ...
- Python正则表达式初识(八)
继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是“\w”和“\W”,具体的教程如下. 1.“\w”代表的意思是该字符为任意字符,但是和特殊字符“.”的意思不同.“\w”代表的字符主 ...
- ES6学习笔记(九)Set和Map数据结构
1.set 基本等于Java的Set集合类型,无序不可重复集,常被用来去重. 基本用法 const s = new Set();//通过Set()构造函数创建 [2, 3, 5, 4, 5, 2, 2 ...
- js中运算符优先级问题
其实事情是这样的,最近看到不少朋友讨论一道据说不知道哪儿的笔试题目,题目如下: var a = {n:1}; var b = a; a.x = a = {n:2}; 请写出a.x的值. 当然通过运行, ...
- HDU-5307 He is Flying (FFT)
Problem DescriptionJRY wants to drag racing along a long road. There are n sections on the road, the ...
- Reference Counting GC (Part two :Partial Mark & Sweep)
目录 部分标记清除算法 前提 dec_ref_cnt()函数 new_obj()函数 scan_hatch_queue()函数 paint_gray()函数 scan_gray()函数 collect ...