【习题 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), ...
随机推荐
- netsh http的使用
1.首先通过cmd进入 C:\Windows\System32\inetsrv>netshnetsh>http netsh http> 退出的时候,使用exit命令 2.显示监听的i ...
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
本文原创,转载请注明出处:http://blog.csdn.NET/qinjuning 在掌握了JNI函数的使用和相关类型的映射后,以及知晓何利用javah工具生成对应的jni函数以及如何生成动态 链 ...
- js --- 中字符串与unicode编码
1.charAt():把字符串分成每一个字符,从左往右提取指定位置的字符 var str = '天气'; alert( str.charAt(1) ); //气 2.charCo ...
- 好吧,左小波出山了——ie8兼容indexOf问题
我,还是一个不懂世事的毛头小子,第一次写博.万事开头难,没事咱慢慢来.咳,练文笔吗.我觉得写东西最锻炼逻辑思维,我是一个不善于表达的人,可能是程序员的通病,但你看看人家王小波,八九十年代的作家兼职程序 ...
- Hexo 搭建
前提 最近准备搭建一个博客平台,也看了很多开源的博客框架.比如Solo.wordpress等框架.自已曾经也在cnblog发布过几篇文章.东写写西写写.杂乱无章的.后续可以写一个自动同步各平台的程序~ ...
- 六台机器搭建RedisCluster分布式集群
原文:六台机器搭建RedisCluster分布式集群 版权声明:m_nanle_xiaobudiu https://blog.csdn.net/m_nanle_xiaobudiu/article/de ...
- CSUOJ 1525 Algebraic Teamwork
Problem A Algebraic Teamwork The great pioneers of group theory and linear algebra want to cooperate ...
- C++的new_handler
这个new_handler其实对应于signal_handler 当operator new申请一个内存失败时,它会进行如下的处理步骤:1.如果存在客户指定的处理函数,则调用处理函数(new_hand ...
- Android捕获View焦点事件,LinearLayout结合HorizontalScrollView实现ViewPgaer和选项卡Tabs联动
<Android捕获View焦点事件,LinearLayout结合HorizontalScrollView实现ViewPgaer和选项卡Tabs联动.> 如图: package zh ...
- MAC 下的简单 SHELL 入门
1.创建文件 .sh 文件 本例,将 sh 文件全名为 demo.sh,接下来使用随意熟悉的编辑器编辑命令就可以 2.编写 .sh 文件 #!/bin/sh echo +--------------- ...