用陣列紀錄如果超出範圍的前一個座標,如果那個座標曾被標記過,代表這次可以忽略。
程式碼:
#include <iostream>
using namespace std;
int main()
{
int w,h,x,y,map[51][51]={0};
char direction;
cin>>w>>h;
while(cin>>x>>y>>direction)
{
int lost=0;
string command;
cin>>command;
for(int i=0;i<command.size();i++)
{
if(command[i]=='L')
{
switch(direction)
{
case 'N':
direction='W';break;
case 'E':
direction='N';break;
case 'S':
direction='E';break;
case 'W':
direction='S';break;
}
}
else if(command[i]=='R')
{
switch(direction)
{
case 'N':
direction='E';break;
case 'E':
direction='S';break;
case 'S':
direction='W';break;
case 'W':
direction='N';break;
}
}
else if(command[i]=='F')
{
int nextX=x,nextY=y;
if(direction=='N') nextY++;
else if(direction=='E') nextX++;
else if(direction=='S') nextY--;
else if(direction=='W') nextX--;
if(nextX>w||nextX<0||nextY>h||nextY<0)
{
if(map[x][y]==1)
continue;
else
{
lost=1;
map[x][y]=1;
break;
}
}
x=nextX,y=nextY;
}
}
cout<<x<<" "<<y<<" "<<direction<<(lost?" LOST":"")<<endl;
}
return 0;
}
沒有留言:
張貼留言