博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA225 Golygons 黄金图形(dfs+回溯)
阅读量:4708 次
发布时间:2019-06-10

本文共 1839 字,大约阅读时间需要 6 分钟。

剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点。

剪枝2:当前位置怎么也走不回去。

3:沿途判断障碍即可。

在oj上提交0.347s,最快的0.012s,应该有更好的做法。

#include
const char *bin = "ensw";const int dx[] = {
1,0, 0,-1};const int dy[] = {
0,1,-1, 0};const int maxn = 230;//1+...20const int o = 115;const int N = 24;const int nxt_dir[5][4] = {
{
1,2},{
0,3},{
0,3},{
1,2},{
0,1,2,3}};const int deg[5] = {
2,2,2,2,4};int vis[maxn][maxn];int n;int sum[N];int left[N];int path[N];int cnt;void dfs(int x,int y,int d,int dir){ if(d++ == n ){ if(x == o && y == o){ for(int i = 0; i < n; i++){ printf("%c",bin[path[i]]); } putchar('\n'); cnt++; } return ; } for(int i = 0; i < deg[dir]; i++){ int j = nxt_dir[dir][i]; int nx = x+dx[j]*d, ny = y+dy[j]*d; if(vis[nx][ny]) continue; if(abs(nx-o) + abs(ny-o) > left[d]) continue; bool flag = false; if(j == 0|| j == 3){ for(int tx = x+dx[j]; tx != nx ; tx+=dx[j]){ if(!~vis[tx][y]) {flag = true; break;} } }else { for(int ty = y+dy[j]; ty != ny ; ty+=dy[j]){ if(!~vis[x][ty]) {flag = true; break;} } } if(flag) continue; path[d-1] = j; vis[nx][ny] = 1; dfs(nx,ny,d,j); vis[nx][ny] = 0; }}int main(){ // freopen("in.txt","r",stdin); int T; scanf("%d",&T); for(int i = 1; i < N; i++) sum[i] = sum[i-1]+i; while(T--){ int k; scanf("%d%d",&n,&k); if(((n>>1)&1)^(n&1)) { printf("Found 0 golygon(s).\n\n"); continue; } int tx,ty; memset(vis,0,sizeof(vis)); for(int i = 0; i < k; i++){ scanf("%d%d",&tx,&ty); if(abs(tx)

 

转载于:https://www.cnblogs.com/jerryRey/p/4637042.html

你可能感兴趣的文章
OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
查看>>
老程序员的10个忠告(转)
查看>>
python之re模块
查看>>
临界区,互斥量,信号量,事件的区别
查看>>
Pubwin服务端重装(安装)教程
查看>>
NFS 数据共享工具
查看>>
C++ 函数参数的默认值
查看>>
python处理excel之openpyxl库
查看>>
jquery如何通过name名称获取当前name的value值
查看>>
MySQL数据库备份和还原的常用命令
查看>>
博客开通了5天了也没有发篇文章
查看>>
微信公众号开发-遇到的坑
查看>>
ac自动机俩模板
查看>>
selenium-键盘和鼠标事件
查看>>
mysql添加用户,授权,刷新权限
查看>>
duilib进阶教程 -- TreeView控件(6)
查看>>
【算法】怎样把一个单链表反序?
查看>>
Django组件 cookie/session
查看>>
Vim的一些简单操作
查看>>
Object-C 声明属性为什么用下划线
查看>>