hdu 1035 robot motion

来源:互联网 发布:网络劫持广告怎么解决 编辑:程序博客网 时间:2024/06/06 01:10
题目的意思就是给一个初始位置,按着指示往下走,计算出走出方格的步数 或者遇到循环的圈子计算圈子的步数和到达圈子的步数
#include <iostream>using namespace std;struct node{char instr;//指示方向int step;//步骤};node Arr[11][11];int iN,iM,istart_pos;//row,column,开始位置int ipath_steps;//路径步数int iloop_steps;//循环步数void Export(){for(int i = 1; i <= iN; i++){for(int j = 1; j <= iM; j++){cin>>Arr[i][j].instr;Arr[i][j].step = 0;}}}void Next_pos(int& a,int& b)//走下一位置{switch(Arr[a][b].instr){case 'N':a = a - 1;break;case 'S':a = a + 1;break;case 'E':b = b + 1;break;case 'W':b = b - 1;break;default:break;}}bool isborder(int x,int y)//判断是否在grid中{if(x < 1 || x > iN || y < 1 || y > iM){return false;//不在grid内}return true;//在grid内}void DFS(int x,int y){int a = x;int b = y;Next_pos(a,b);//a和 b是下一个位置if(!isborder(a,b))//不在网格内了 直接打印{cout<<Arr[x][y].step + 1<<" step(s) to exit"<<endl;return;}if(Arr[a][b].step != 0)//只要这个不等于零 就表明进入了圈子{ipath_steps = Arr[a][b].step;iloop_steps = Arr[x][y].step - Arr[a][b].step + 1;if(ipath_steps == 1)//这个地方错了一次 注意当步数为1时这要特殊处理ipath_steps = 0;cout<<ipath_steps<<" step(s) before a loop of "<<iloop_steps<<" step(s)"<<endl;return;}Arr[a][b].step = Arr[x][y].step + 1;DFS(a,b);}int main(){while(cin>>iN>>iM>>istart_pos,iN !=0 && iM != 0 && istart_pos != 0){Export();//输出数据函数DFS(1,istart_pos);}return 0;}


原创粉丝点击