机器人搬重物
来源:互联网 发布:花殿淘宝店是正品吗 编辑:程序博客网 时间:2024/04/27 14:06
- 比赛描述
机器人移动学会(RMI)现在正尝试用机器人搬运物品。机器人的形状是一个直径1.6 米的球。在试验阶段,机器人被用于在一个储藏室中搬运货物。储藏室是一个N*M 的网格,有些格子为不可移动的障碍。机器人的中心总是在格点上,当然,机器人必须在最短的时间内把物品搬运到指定的地方。机器人接受的指令有:先前移动1 步(Creep);向前移动2 步(Walk);向前移动3步(Run);向左转(Left);向右转(Right)。每个指令所需要的时间为1 秒。请你计算一下机器人完成任务所需的最少时间。
- 输入
输入的第一行为两个正整数N,M(N,M<=50),下面N行是储藏室的构造,0表示无障碍,1 表示有障碍,数字之间用一个空格隔开。接着一行有四个整数和一个大写字母,分别为起始点和目标点左上角网格的行与列,起始时的面对方向(东E,南S,西W,北N),数与数,数与字母之间均用一个空格隔开。终点的面向方向是任意的。
- 输出
一个整数,表示机器人完成任务所需的最少时间。如果无法到达,输出-1。
- 样例输入
9 10
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 0
7 2 2 7 S
- 样例输出
12
#include<iostream> using namespace std; int dx[4]={0,1,0,-1}; int dy[4]={1,0,-1,0}; int map[56][56],nmap[56][56]; int m,n,min,bi,bj,ei,ej,d; int stp[56][56][56],mins; bool p; int toward(char c) { if(c=='E') return 0; if(c=='S') return 1; if(c=='W') return 2; if(c=='N') return 3; return 0; } int main() { int i,k,j; scanf("%d%d",&m,&n); for(i=1;i<=m;i++) for(j=1;j<=n;j++) scanf("%d",&map[i][j]); for(i=1;i<=m-1;i++) { for(j=1;j<=n-1;j++) { if(map[i][j]==0&&map[i][j+1]==0&&map[i+1][j]==0&&map[i+1][j+1]==0) nmap[i][j]=1; } } scanf("%d%d%d%d",&bi,&bj,&ei,&ej); getchar(); char ch=getchar(); d=toward(ch); /////////////////////////////// for(i=0;i<m;i++) for(j=0;j<n;j++) for(k=0;k<4;k++) stp[i][j][k]=10000; //////////////////////////////// if(nmap[bi][bj]) { stp[bi][bj][d]=0; p=true; } while(p) { p=false; for(i=1;i<m;i++) for(j=1;j<n;j++) for(k=0;k<4;k++) if(nmap[i][j]&&stp[i][j][k]<10000) { if(nmap[i+dx[k]][j+dy[k]]) { if(stp[i+dx[k]][j+dy[k]][k]>stp[i][j][k]+1) { stp[i+dx[k]][j+dy[k]][k]=stp[i][j][k]+1; p=true; } if(nmap[i+2*dx[k]][j+2*dy[k]]) { if(stp[i+2*dx[k]][j+2*dy[k]][k]>stp[i][j][k]+1) { stp[i+2*dx[k]][j+2*dy[k]][k]=stp[i][j][k]+1; p=true; } if(nmap[i+3*dx[k]][j+3*dy[k]]) if(stp[i+3*dx[k]][j+3*dy[k]][k]>stp[i][j][k]+1) { stp[i+3*dx[k]][j+3*dy[k]][k]=stp[i][j][k]+1; p=true; } } } if(stp[i][j][(k+1)%4]>stp[i][j][k]+1) { stp[i][j][(k+1)%4]=stp[i][j][k]+1; p=true; } if(stp[i][j][(k+3)%4]>stp[i][j][k]+1) { stp[i][j][(k+3)%4]=stp[i][j][k]+1; p=true; } } } mins=10000; for(k=0;k<4;k++) { if(mins>stp[ei][ej][k]) mins=stp[ei][ej][k]; } if(mins==10000) { cout<<"-1"<<endl; } else cout<<mins<<endl; return 0; }
0 0
- 机器人搬重物 acm
- 机器人搬重物
- 机器人搬重物
- P1126 机器人搬重物
- P1126 机器人搬重物
- P1126 机器人搬重物
- 洛谷P1126 机器人搬重物
- 洛谷 P1126 机器人搬重物
- 【搜索】[luoguP1126]机器人搬重物
- 南邮 OJ 1583 机器人搬重物
- 【The first】 题解:机器人搬重物
- 【p1126-机器人搬重物】解题记录
- 洛谷P1126-机器人搬重物-BFS/SPFA
- 洛谷网 1126机器人搬重物 优先队列搜索 一般
- 波士顿动力机器人“体力不支”,搬箱子不成反摔倒
- 搬
- 绳子与重物
- 51nod1307 绳子与重物
- Mymusic SplashScreen界面实现
- 二分查找
- Echarts转换数据的简单工具
- Armadillo C++ linear algebra library 学习笔记(6)——生成矩阵
- 网络交换机怎么设置
- 机器人搬重物
- Hadoop-2.2.0启动./start-dfs.sh报错解决方法
- maven 相关
- 进制之间的转换
- http文件下载
- Android笔记---adb (安卓调试桥)的使用
- 收藏网站21
- Jpush的快速集成
- hdu 1028 Ignatius and the Princess III(整数拆分较大数据量模板)