正文

简单机器人模拟2006-07-27 17:20:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/tonyhu/16868.html

分享到:


简单机器人模拟

       题目:(zju1708: Robot Motion)

       以矩阵形式给定一张地图和机器人的初始位置。矩阵上每一点的字母代表在这一点机器人的移动方向。如果机器人按图中信息能走出的话输出需要的步数。如果机器人进入某个循环则输出循环前所走的步数和循环的长度。

        

v     Sample Input

v     3 6 5  //地图行列大小和机器人起始点
NEESWE //NESW分别表示North,East,South,West四个方向
WWWESS
SNWWWW
4 5 1 
//另一个TEST
SESWE
EESNW
NWEEN
EWSEN
0 0 0         //000
结束输入

v     Sample Output

10 step(s) to exit
3 step(s) before a loop of 8 step(s)

 

源程序如下:

#include<iostream>
using namespace std;

 

int data[100][100];
int row,col; //地图行列数


void move(int r,int c)
{
 int step=1;    //记录每个坐标的步数信息(开始是第一步)
 bool Noexit=true;  //是否已经出界状态(开始肯定没出界^_^)
 while(Noexit&&data[r][c]<0) //要判断是否出界还要判断以前是否路过
 {
  int tmp=data[r][c];
  data[r][c]=step++; //路过一个坐标就把这个坐标的值定为步数
       //由于非负,正好说明了此点已走过
  switch(tmp)   //依方向前进
  {
  case -1:--r;  break;
  case -2:++r; break;
  case -3:--c  break;
  case -4:++c; break;
  }
   Noexit=( r>=0&&r<row&&c>=0&&c<col);//更新出界状态
 }
 if(!Noexit)  //出界了,说明已经走出
  cout<<step-1<<" step(s) to exit"<<endl;
 else   //没出界,说明碰到了原路径,循环去了,走不出去
  cout<<data[r][c]-1<<" step(s) before a loop of "
  <<step-data[r][c]<<" step(s)"<<endl;
}


int main()
{
 int a,b,c,i,j;
 char ch;
 while((cin>>a>>b>>c)&&a)
 {
  for(i=0;i<a;i++)
   for(j=0;j<b;j++)
   {
    cin>>ch;  //输入地图,为了方便用-1到-4表四个方向
    switch(ch)
    {
    case'N':data[i][j]=-1; break;
    case'S':data[i][j]=-2; break;
    case'W':data[i][j]=-3; break;
    case'E':data[i][j]=-4; break;
    }
   }
   row=a;  //从输入中得到地图行列数
   col=b;
   move(0,c-1); //从0行c-1列起点进行模拟前进
 }
}

阅读(4488) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册