UVa——1600(巡逻机器人)
迷宫求最短路的话一般用bfs都可以解决,但是这个加了个状态,那么就增加一个维度,用来判断k的值。比较简单的三维bfs。写搜索题的话一定要注意细节。这个题花了好长的时间。因为k的原因,一开始用了k的原因,dfs好想一些,因为可以回溯,k的值搜完一个方向,然后回溯。那样就很简单。而且数据是20*20.
但是最后dfs还是T了。
AC的bfs
1 #include <iostream> 2 #include <cstring> 3 #include <string> 4 #include <map> 5 #include <set> 6 #include <algorithm> 7 #include <fstream> 8 #include <cstdio> 9 #include <cmath> 10 #include <stack> 11 #include <queue> 12 using namespace std; 13 const double Pi=3.14159265358979323846; 14 typedef long long ll; 15 const int MAXN=5000+5; 16 int dx[4]={-1,1,0,0}; 17 int dy[4]={0,0,1,-1}; 18 const int INF = 0x3f3f3f3f; 19 const int NINF = 0xc0c0c0c0; 20 const ll mod=1e9+7; 21 int vis[25][25][25]; 22 int M[25][25]; 23 int m,n; 24 struct node{ 25 int x,y,step,k; 26 node (int x=0,int y=0,int step=0,int k=0) 27 { 28 this->x=x; 29 this->y=y; 30 this->step=step; 31 this->k=k; 32 } 33 }tim,now; 34 int bfs(int x,int y,int k) 35 { 36 queue <node> Q; 37 Q.push(node(1,1,0,k)); 38 vis[1][1][k]=1; 39 while(!Q.empty()) 40 { 41 tim=Q.front();Q.pop(); 42 if(tim.x==m&&tim.y==n) 43 { 44 return tim.step; 45 } 46 for(int i=0;i<4;i++) 47 { 48 now.x=dx[i]+tim.x; 49 now.y=dy[i]+tim.y; 50 if(M[now.x][now.y]==1) now.k=tim.k-1; 51 else now.k=k; 52 if(now.x>=1&&now.x<=m&&now.y>=1&&now.y<=n&&(M[now.x][now.y]==0||now.k>=0)&&!vis[now.x][now.y][now.k]) 53 { 54 now.step=tim.step+1; 55 Q.push(now); 56 //cout << now.x<<" "<< now.y<< " "<< now.step<<endl; 57 vis[now.x][now.y][now.k]=1; 58 } 59 } 60 } 61 return -1; 62 } 63 int main() 64 { 65 int t;cin>>t; 66 while(t--) 67 { 68 cin>>m>>n; 69 int k;cin>>k; 70 memset(vis,0,sizeof(vis)); 71 for(int i=1;i<=m;i++) 72 for(int j=1;j<=n;j++) 73 cin>>M[i][j]; 74 cout <<bfs(1,1,k)<<endl; 75 } 76 return 0; 77 }
View Code
TLE的dfs
1 #include <iostream> 2 #include <cstring> 3 #include <string> 4 #include <map> 5 #include <set> 6 #include <algorithm> 7 #include <fstream> 8 #include <cstdio> 9 #include <cmath> 10 #include <stack> 11 #include <queue> 12 using namespace std; 13 const double Pi=3.14159265358979323846; 14 typedef long long ll; 15 const int MAXN=5000+5; 16 int dx[4]={-1,1,0,0}; 17 int dy[4]={0,0,1,-1}; 18 const int INF = 0x3f3f3f3f; 19 const int NINF = 0xc0c0c0c0; 20 const ll mod=1e9+7; 21 int m,n; 22 int vis[25][25]; 23 int M[25][25]; 24 int step[25][25]; 25 int ans=INF; 26 int tk; 27 void dfs(int x,int y,int k) 28 { 29 if(x==m&&y==n) 30 { 31 if(ans>step[x][y]) 32 ans=step[x][y]; 33 return; 34 } 35 for(int i=0;i<4;i++) 36 { 37 int sx=dx[i]+x; 38 int sy=dy[i]+y; 39 if(sx>=1&&sx<=m&&sy>=1&&sy<=n&&!vis[sx][sy]&&(k>0||M[sx][sy]==0)) 40 { 41 int pk=k; 42 if(M[sx][sy]==1) pk--; 43 else pk=tk; 44 vis[sx][sy]=1; 45 step[sx][sy]=step[x][y]+1; 46 dfs(sx,sy,pk); 47 vis[sx][sy]=0; 48 } 49 } 50 } 51 int main() 52 { 53 int t;cin>>t; 54 while(t--) 55 { 56 ans=INF; 57 memset(vis,0,sizeof(vis)); 58 memset(step,-1,sizeof(step)); 59 cin>>m>>n;cin>>tk; 60 for(int i=1;i<=m;i++) 61 for(int j=1;j<=n;j++) 62 cin>>M[i][j]; 63 step[1][1]=0; 64 vis[1][1]=1; 65 dfs(1,1,tk); 66 if(step[m][n]!=-1) cout <<ans<<endl; 67 else cout <<-1<<endl; 68 } 69 return 0; 70 }
View Code
转载于:https://www.cnblogs.com/Msmw/p/10732652.html
UVa——1600(巡逻机器人)相关推荐
- UVA 1600 巡逻机器人
巡逻机器人 Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu 题意·:一个机器人从(1,1)点走到( ...
- UVa 1600 巡逻机器人(Patrol Robot)
机器人要从一个网格的左上角走到右下角,网格中的一些格子是空地,用0表示,障碍物用1表示,机器人每次可以往上下左右走1格,但不能连续的穿过k格障碍,求最短路的长度,起点终点保证是空地. 要点: 本题乍看 ...
- 简单BFS 紫书 UVA 1600 巡逻机器人(Patrol Robot)
题目链接: https://vjudge.net/problem/UVA-1600 思路 开了一个二维数组buf记录图的信息. Node中额外开了一片内存用来储存穿墙信息. 这道题一定要注意将点标记为 ...
- UVA:1600 巡逻机器人
转载:https://blog.csdn.net/u014004096/article/details/42920629 题意大概: 机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的 ...
- 瓦力机器人故障维修_大眼萌!5G巡逻机器人亮相乌镇,24小时值守互联网大会...
大大的眼睛,方方的身体, 一台酷似"瓦力"的机器人 出现在互联网之光新展馆. 原来这是嘉兴公安的"新同事"-5G巡逻机器人,今天是它第一天上岗.这也是本次世界互 ...
- 巡逻机器人用应用的pc端车牌识别
PC端车牌识别产品形态 加密锁.车牌识别SDK开发包.开发文档 pc端车牌识别使用背景 人工智能的发展,京东送件也用上了送件机器人,某机器人公司如今研发出巡逻机器人,用于对可以车辆的抓拍与检查,在停车 ...
- 安防巡逻机器人在不同应用场景下的作用是什么?
目前,传统的安防行业正在加速人工智能在该领域的集成和应用.随着人工智能安防技术进一步加强,如今,很多城市都开始纷纷打造一座智慧型城市,安防机器人也普遍出现在各个行业当中,下面,国辰机器人就为大家来盘点 ...
- 工业机器人 郝卫东_智能保安巡逻机器人论文
第 1 页 共 5 页 智能保安巡逻机器人 黄海明 杨雷 宋跃 赖思沅 ( 东莞理工学院电子工程学院,广东 东莞 523808) 摘 要: 设计一个具有自动远程值守. GPRS 遥控. 远程监控等功能 ...
- 水下自动循迹机器人_一种夜间巡逻机器人自动循迹方法
一种夜间巡逻机器人自动循迹方法 [技术领域] [0001]本发明涉及机器人应用技术领域,尤其涉及一种夜间巡逻机器人自动循迹方法. [背景技术] [0002]目前,博物馆.会展中心以及公园等场所的夜间安 ...
- BFS 巡逻机器人
巡逻机器人 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/F 题目大意: 机器人在一个矩形区域巡逻, ...
最新文章
- 《智能网联汽车技术路线图 2.0》重磅发布
- mysql插入第一_mySQL教程 第5章 插入 更新与删除数据
- crontab定时执行python脚本_linux下使用crontab定时执行python脚本
- 游戏人物标记——腾讯笔试
- 北斗导航 | 卫星导航发展史
- 两个线程,一个线程打印1~52,另一个线程打印字母A-Z,打印顺序为12A34B56C……5152Z...
- mysql导入csvnull,MySQL Workbench从CSV导入NULL
- JavaScript Math 对象
- 在ie6下remove包含iframe的table所在的容器,会导致页面控件的焦点诡异丢失。
- asp.net很有用的字符串操作类
- MySQL Workbench给其他IP用户分配权限
- BZOJ 1013 球形空间产生器(高斯消元)
- Android高级控件(一)——ListView绑定CheckBox实现全选,添加和删除等功能
- android手机视频,安卓手机视频加密软件
- itools 苹果录屏大师 java_itools录屏大师使用常见问题_itools苹果录屏大师无法连接解决办法...
- 中文版putty后门事件分析
- eclipse转Androidstudio AAPT: error: file failed to compile.
- 2008 go server sql 批处理_Transact-SQL批处理
- 使用SendGrid宇宙函数发送电子邮件
- 全国降雨侵蚀力因子R值计算/土壤侵蚀计算
热门文章
- 管理心智能量,在恐惧之下训练心流
- promise获取所有文件路径_python使用os.listdir和os.walk获得文件的路径
- socket 长链接linux,手把手教你写 Socket 长连接
- 财务数据中台架构及建设方案(ppt)
- 武侠大宗师 本机搭建, 自玩
- 容联云聚客SCRM如何破SCRM保险应用困局
- win10右键一直转圈_【雷粉百科】windows10鼠标点击右键出现卡顿或者转圈
- TP3.2.3到TP5的变化
- 【疑难杂症爆破委员会】UEFI Linux、Windows双系统,丢失Windows的efi文件导致找不到启动项(恢复Windows的efi文件)
- 5G网络时代助推社交电商,小蜜蜂社交电商的新生态新发展