E - Ricochet Robots( dfs+hash优化 )

题目链接:Gym - 100783E

题意:

w*h的二维地图中,n个机器人,一个( 或者多个 )特定的点。 每次操作可以指定一个机器人向上下左右四个方向其一运动,直到碰到边界,其他机器人才停下。问能否在k次操作前,某个机器人到达特殊点。输出最少操作数或者NO

‘W’表示墙, ‘1’,'2','3'.'4'表示4个机器人, ‘X’表示特定的点, ‘ . ’表示空地。

1 ≤ n ≤ 4 ,max(w, h) ≤ 10 , 1<= k <=10

思路:dfs枚举所有可能,最多4个机器人,地图大小10*10,10次操作的复杂度应该是O( pow(4*4, 10) ) 肯定超时。

但是感觉四个机器人能去的地方很有限,所以对四个机器人的位置hash成一个整数,存一下状态,就可以过了,不优化样例也过不去。

代码:

#include <bits/stdc++.h>using namespace std;struct node {int x,y;
}robot[10];
int nxt[4][2] = {0,1,0,-1,1,0,-1,0};
char mp[15][15];
int via[15][15];
unordered_map<long long,int> dp;
int tot,n,m,limit,ans;void dfs( int pos ) // 10*100*100
{if ( pos>ans ) return ;if ( pos>=limit ) return;long long hash_now=pos;for ( int i=1; i<=tot; i++ ) {hash_now = hash_now*10+robot[i].x;hash_now = hash_now*10+robot[i].y;}if ( dp[hash_now] ) return ;for ( int i=1; i<=tot; i++ ) {for ( int j=0; j<4; j++ ) {int lastx = robot[i].x;int lasty = robot[i].y;while ( 1 ) {int xx = robot[i].x+nxt[j][0];int yy = robot[i].y+nxt[j][1];if ( xx<0||yy<0||xx>=n||yy>=m||via[xx][yy]==1 ) {break ;}robot[i].x = xx;robot[i].y = yy;};if ( mp[ robot[i].x ][ robot[i].y ]=='X' && i==1 ) ans=min(ans,pos+1);via[lastx][lasty] = 0;via[robot[i].x][robot[i].y] = 1;dfs(pos+1);via[robot[i].x][robot[i].y] = 0;via[lastx][lasty] = 1;robot[i].x=lastx; robot[i].y=lasty;}}dp[hash_now]=1;
}int main()
{//cout << pow(8,10);scanf("%d %d %d %d",&tot,&m,&n,&limit);ans = 100;for ( int i=0; i<n; i++ ) {getchar();for ( int j=0; j<m; j++ ) {scanf("%c",&mp[i][j]);if ( mp[i][j]>='1' && mp[i][j]<='4' ) {int p = mp[i][j]-'0';robot[p].x=i; robot[p].y=j;via[i][j] = 1;}else if ( mp[i][j]=='W' ) via[i][j]=1;}}dfs(0);if ( ans==100 ) printf("NO SOLUTION\n");else printf("%d\n",ans);return 0;
}
/*
2 5 4 6
.2...
...W.
WWW..
.X.1.
*/

E - Ricochet Robots( dfs+hash优化 )相关推荐

  1. UVALive 6888 Ricochet Robots bfs

    Ricochet Robots 题目连接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=129726 Descript ...

  2. DFS 深度优化搜索

    DFS 深度优化搜索 DFS 算法 思想:一直往深处走,直到找到解或者走不下去为止 类似于树的先根遍历.就是不撞南墙不回头 模板一: DFS(dep,..)//dep代表目前DFS的深度 {if(找到 ...

  3. DFS剪枝优化 小猫爬山 数独

    DFS剪枝策略总结 优化搜索顺序 优先搜索分支数少(剩余选择少)的情况 排除等效冗余 若对顺序没有要求 可以将排列转化为组合 可行性剪枝 不合法的情况不进行搜索 最优化剪枝 若当前的"消耗& ...

  4. POJ2308连连看dfs+bfs+优化

    DFS+BFS+MAP+剪枝 题意:       就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路:      首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...

  5. szucodeforce训练1081C组合数学lucas定理,div2 627的D dfs +剪枝优化,697D Puzzles{dfs序+概率}

    给你n个方格排成一行,有m种颜色,然后要把这n个方格分成k+1段,每段涂不同的颜色,问有多少种方法. 组合数学Lucas定理 排列组合问题,首先要在n-1个位置里面选出k个位置当作段与段的分割点,然后 ...

  6. 2017 蓝桥杯决赛 C++B(2)瓷砖样式 dfs + hash去重

    标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格. 现在手头有一批刚好能盖住2个小方格的长方形瓷砖. 瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的花 ...

  7. POJ 1129 Channel Allocation DFS+四色问题优化

    一道DFS题,能过采用四色问题的结论进行优化. 题目链接:http://poj.org/problem?id=1129 问题是说有n个广播站,相邻的广播站为了避免干扰,需要用不同的频道,最少需要有多少 ...

  8. 生日蛋糕 dfs剪枝优化

    7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当 ...

  9. ROBOTS.TXT在SEO优化中的运用(ROBOTS.TXT SEO优化实战)

    2019独角兽企业重金招聘Python工程师标准>>> 豆瓣网的robots.txt中有Crawl-delay.Visit-time.Request-rate,好多人搞不清楚这是什么 ...

最新文章

  1. UnixLinux大学教程 读书笔记【1-3章】
  2. Mac 10.12安装Office 2011
  3. 技术人员,为什么会苦逼
  4. 顶会ACL这十年:百度披荆斩棘,中国NLP乘风破浪
  5. 使用mybatis向oracle数据库插入数据异常
  6. 外观数列Python解法
  7. 二级计算机access押题,全国计算机等级考试标准教程:二级Access
  8. 多线程有几种实现方法?同步有几种实现方法?
  9. 推荐几个最好用的CRM软件,本人亲测
  10. MAX30102 高灵敏度脉搏氧器和心率传感器说明书
  11. 莫斯科的年轻人(一)
  12. 如何用计算机计算概率,概率计算器与阶乘方程
  13. 微信小程序 9宫格翻牌动画
  14. 项管行知04--项目章程
  15. 会议记录管理系统(5) -浏览会议记录模块设计
  16. 星河麒麟V10 安装达梦数据库DM8教程
  17. BUUCTF——MISC(流量分析)
  18. MySQL Workbench报错说 seems to be a different OS
  19. 机器学习中的概率模型
  20. HTML5文件选择框(各种类型)

热门文章

  1. 高考放榜季 | 知道创宇全方位保障教育政务网站安全可用
  2. 微信小店二次开发_怎么吧微信小店装修的更好看
  3. PythonStock(37)股票系统:Python股票系统发布V2.0版本,改个名字吧,叫Python全栈股票系统2.0,可以实现数据的抓取(akshare),统计分析,数据报表展示。
  4. java.net.ConnectException: [NACOS HTTP-POST] The maximum number of tolerable server reconnection err
  5. Mac OS 安装IE
  6. 2020年中级数据库系统工程师考试笔记7—关系数据库1
  7. CAD等高线转地形高程散点
  8. MySql打开局域网及广域网端口
  9. “App开发者需要更新此App以在此iOS版本上正常工作 ” 解决方法
  10. 批量提取PPT里面包含的图片教程