迷宫求最短路的话一般用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(巡逻机器人)相关推荐

  1. UVA 1600 巡逻机器人

    巡逻机器人 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu 题意·:一个机器人从(1,1)点走到( ...

  2. UVa 1600 巡逻机器人(Patrol Robot)

    机器人要从一个网格的左上角走到右下角,网格中的一些格子是空地,用0表示,障碍物用1表示,机器人每次可以往上下左右走1格,但不能连续的穿过k格障碍,求最短路的长度,起点终点保证是空地. 要点: 本题乍看 ...

  3. 简单BFS 紫书 UVA 1600 巡逻机器人(Patrol Robot)

    题目链接: https://vjudge.net/problem/UVA-1600 思路 开了一个二维数组buf记录图的信息. Node中额外开了一片内存用来储存穿墙信息. 这道题一定要注意将点标记为 ...

  4. UVA:1600 巡逻机器人

    转载:https://blog.csdn.net/u014004096/article/details/42920629 题意大概: 机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的 ...

  5. 瓦力机器人故障维修_大眼萌!5G巡逻机器人亮相乌镇,24小时值守互联网大会...

    大大的眼睛,方方的身体, 一台酷似"瓦力"的机器人 出现在互联网之光新展馆. 原来这是嘉兴公安的"新同事"-5G巡逻机器人,今天是它第一天上岗.这也是本次世界互 ...

  6. 巡逻机器人用应用的pc端车牌识别

    PC端车牌识别产品形态 加密锁.车牌识别SDK开发包.开发文档 pc端车牌识别使用背景 人工智能的发展,京东送件也用上了送件机器人,某机器人公司如今研发出巡逻机器人,用于对可以车辆的抓拍与检查,在停车 ...

  7. 安防巡逻机器人在不同应用场景下的作用是什么?

    目前,传统的安防行业正在加速人工智能在该领域的集成和应用.随着人工智能安防技术进一步加强,如今,很多城市都开始纷纷打造一座智慧型城市,安防机器人也普遍出现在各个行业当中,下面,国辰机器人就为大家来盘点 ...

  8. 工业机器人 郝卫东_智能保安巡逻机器人论文

    第 1 页 共 5 页 智能保安巡逻机器人 黄海明 杨雷 宋跃 赖思沅 ( 东莞理工学院电子工程学院,广东 东莞 523808) 摘 要: 设计一个具有自动远程值守. GPRS 遥控. 远程监控等功能 ...

  9. 水下自动循迹机器人_一种夜间巡逻机器人自动循迹方法

    一种夜间巡逻机器人自动循迹方法 [技术领域] [0001]本发明涉及机器人应用技术领域,尤其涉及一种夜间巡逻机器人自动循迹方法. [背景技术] [0002]目前,博物馆.会展中心以及公园等场所的夜间安 ...

  10. BFS 巡逻机器人

    巡逻机器人 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/F 题目大意: 机器人在一个矩形区域巡逻, ...

最新文章

  1. 《智能网联汽车技术路线图 2.0》重磅发布
  2. mysql插入第一_mySQL教程 第5章 插入 更新与删除数据
  3. crontab定时执行python脚本_linux下使用crontab定时执行python脚本
  4. 游戏人物标记——腾讯笔试
  5. 北斗导航 | 卫星导航发展史
  6. 两个线程,一个线程打印1~52,另一个线程打印字母A-Z,打印顺序为12A34B56C……5152Z...
  7. mysql导入csvnull,MySQL Workbench从CSV导入NULL
  8. JavaScript Math 对象
  9. 在ie6下remove包含iframe的table所在的容器,会导致页面控件的焦点诡异丢失。
  10. asp.net很有用的字符串操作类
  11. MySQL Workbench给其他IP用户分配权限
  12. BZOJ 1013 球形空间产生器(高斯消元)
  13. Android高级控件(一)——ListView绑定CheckBox实现全选,添加和删除等功能
  14. android手机视频,安卓手机视频加密软件
  15. itools 苹果录屏大师 java_itools录屏大师使用常见问题_itools苹果录屏大师无法连接解决办法...
  16. 中文版putty后门事件分析
  17. eclipse转Androidstudio AAPT: error: file failed to compile.
  18. 2008 go server sql 批处理_Transact-SQL批处理
  19. 使用SendGrid宇宙函数发送电子邮件
  20. 全国降雨侵蚀力因子R值计算/土壤侵蚀计算

热门文章

  1. 管理心智能量,在恐惧之下训练心流
  2. promise获取所有文件路径_python使用os.listdir和os.walk获得文件的路径
  3. socket 长链接linux,手把手教你写 Socket 长连接
  4. 财务数据中台架构及建设方案(ppt)
  5. 武侠大宗师 本机搭建, 自玩
  6. 容联云聚客SCRM如何破SCRM保险应用困局
  7. win10右键一直转圈_【雷粉百科】windows10鼠标点击右键出现卡顿或者转圈
  8. TP3.2.3到TP5的变化
  9. 【疑难杂症爆破委员会】UEFI Linux、Windows双系统,丢失Windows的efi文件导致找不到启动项(恢复Windows的efi文件)
  10. 5G网络时代助推社交电商,小蜜蜂社交电商的新生态新发展