原题链接:https://vjudge.net/problem/UVA-1533
分类:状态压缩
备注:模拟,BFS水题

感觉这个题没有什么做的价值…前一题做了就够了。

注意几个比较隐晦的细节,每一步必须跳过棋子,且最近的位置必须有棋子,必须跳到最近的空,还有个说法是按字典序最小的输出。

#include<bits/stdc++.h>
using namespace std;
//↖ ↗ ← → ↙ ↘
const int dir[][6]={{},{0,0,0,0,1,2},{0,-1,0,1,2,3},{-2,0,-1,0,2,3},{0,-2,0,1,3,4},{-3,-2,-1,1,3,4},{-3,0,-1,0,3,4},{0,-3,0,1,4,5},{-4,-3,-1,1,4,5},{-4,-3,-1,1,4,5},{-4,0,-1,0,4,5},{0,-4,0,1,0,0},{-5,-4,-1,1,0,0},{-5,-4,-1,1,0,0},{-5,-4,-1,1,0,0},{-5,0,-1,0,0,0}};
const int maxn=1<<16;
bool vis[maxn];
struct node{int state,pnum,bef,id,stp,bp,np;
}p[maxn];
void print(int ind){if(p[ind].bef==-1)return;print(p[ind].bef);if(p[p[ind].bef].bef!=-1)printf(" ");printf("%d %d",p[ind].bp,p[ind].np);
}
int main(void){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int t,x;for(int i=0;i<maxn;i++)p[i].id=i;p[0].bef=-1;p[0].pnum=14;p[0].stp=0;scanf("%d",&t);while (t--){scanf("%d",&x);memset(vis,false,sizeof(vis));p[0].state=((1<<16)-1)^(1<<x);vis[p[0].state]=true;queue<node>q;q.push(p[0]);int ans=-1,cnt=0;while(!q.empty()){node u=q.front(); q.pop();if(u.pnum==1&&((u.state>>x)&1)){ans=u.id; break;}for(int i=1;i<=15;i++){if(!((u.state>>i)&1))continue;for(int j=0;j<6;j++){if(!dir[i][j])continue;int pos=i+dir[i][j];if(!((u.state>>pos)&1))continue;while(dir[pos][j]&&((u.state>>pos)&1))pos+=dir[pos][j];if((u.state>>pos)&1)continue;cnt++; p[cnt].state=u.state|(1<<pos);p[cnt].pnum=u.pnum+1;for(int pos2=i;pos2!=pos;){if((u.state>>pos2)&1){p[cnt].state^=(1<<pos2); p[cnt].pnum--;}pos2=pos2+dir[pos2][j];}if(vis[p[cnt].state]){cnt--; continue;}vis[p[cnt].state]=true;p[cnt].bef=u.id;p[cnt].stp=u.stp+1;p[cnt].bp=i;p[cnt].np=pos;q.push(p[cnt]);}}}printf("%d\n",p[ans].stp);print(ans); printf("\n");}return 0;
}

习题 7-12 移动小球(Moving Pegs, ACM/ICPC Taejon 2000, UVa1533)相关推荐

  1. 算法竞赛入门竞赛 习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)

    给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分 别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol).例如,C6 ...

  2. 习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)

    前n(n≤10000)个整数顺次写在一起:123456789101112-数一数0-9各出现多少次 (输出10个整数,分别是0,1,-,9出现的次数). 原题链接:https://vjudge.net ...

  3. 习题8-14 商队抢劫者(Caravan Robbers, ACM/ICPC SEERC 2005, UVa1616)

    原题链接:https://vjudge.net/problem/UVA-1609 分类:二分法 备注:精度问题,技巧 #include<bits/stdc++.h> using names ...

  4. 习题6_5 巡逻机器人(Patrol Robot, ACM/ICPC Hanoi 2006, UVa1600)

    越障可以拐弯,一个障碍可能被不同路线所经过,所以普通的dfs不行,再加一个维度step,表示走到此结点越过的障碍数 #include<cstdio> #include<cstring ...

  5. UVa1600 习题6-5 巡逻机器人 (Patrol Robot,ACM/ICPC Hanoi 2006)

    原题链接: UVa-1600 题目大意: 模拟机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的左上角(1,1)走到右下角(m,n).网格中的一些格子是空地,用0表示,其它格子是障碍, ...

  6. 1533 Moving Pegs[暴力+打表]

    这个题不是很难,就是暴力模拟一下,利用二进制表示状态,反正最后一共15种结果,暴力程序跑慢点也没事~,2个程序一个250行的暴力,一个150行的表,也是蛮拼的.. 14933000 1533 Movi ...

  7. uva 1533 - Moving Pegs(BFS)

    题目链接:uva 1533 - Moving Pegs 题目大意:在一个跳棋的棋盘上,有15个位置,如题目中图示,现在给出n,表示第n个位置上的没有棋子,问说最少跳几步可以使的棋盘上的棋子只剩一个,并 ...

  8. 习题3.12 另类循环队列 (20 分)

    习题3.12 另类循环队列 (20 分) 如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数.请编写算法实现队列的入队和出队操作. 函数 ...

  9. 习题 3.12 给出一个不多于5位的正整数,要求:1. 求出它是几位数;2. 分别打印出每一位数字;3. 按逆序打印出各位数字,例如原数位321,应输出123。

    C++程序设计(第三版) 谭浩强 习题3.12 个人设计 习题 3.12 给出一个不多于5位的正整数,要求:1. 求出它是几位数:2. 分别打印出每一位数字:3. 按逆序打印出各位数字,例如原数位32 ...

最新文章

  1. vue seo关键词设置_网站SEO常用优化技巧
  2. 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...
  3. IOS开发笔记1-写一个hello world!程序
  4. (转载)linux如何设置为低内核启动(降核)
  5. tkinter 菜单添加事件_tkinter学习教程(七)
  6. QT实现太阳系系统八大行星
  7. HALCON示例程序edge_segments.hdev提取连续的边缘段
  8. ArcGIS API For Javascript :如何动态生成 token 加载权限分配的地图服务?
  9. 批量添加后缀_掌握这 6 个批量处理技巧,少做 80% 的无用功!
  10. decimal转换为int_“System.InvalidCastException 指定的转换无效”问题的反思和总结
  11. 微信中打开h5页面,直接关闭窗口js
  12. Python中的具名元组类用法
  13. day17【前台】支付案例
  14. 大数据分析应具备哪些属性
  15. 年度回顾 | 2019 年的 Apache Flink(文末有福利)
  16. c#web页面显示弹窗_C# .NET弹出窗口
  17. 小Z解读:企业证书利用itms-services协议分发应用在蜂窝网络下的限制
  18. 一篇文章读懂拿了图灵奖和诺贝尔奖的概率图模型
  19. 动态规划从入门到放弃【1】
  20. 大数据学习环境搭建系列(二)虚拟机软件Vmware的安装

热门文章

  1. 【screen】服务器screen基本用法
  2. 热机效率、制冷系数、卡诺定律和热力学第二定律(大学物理笔记)
  3. linux ubuntu3d桌面,Ubuntu 3D桌面设置及效果欣赏[图文]
  4. 测试用例(功能用例)——资产维修、资产报废
  5. 花一万个小时练习 Coding,不要浪费一万小时无谓地 Debugging
  6. 大系统观:1.1从混沌到有序
  7. 在掘金,拿到策略以后如何跑起来?
  8. python编程入门指南磁力下载-Python实现BT种子转化为磁力链接【实战】
  9. postgreSQL pgpool-II
  10. 182:vue+openlayers 使用d3实现地图区块呈现不同颜色的效果