2020年8月10日 星期一

118 - Mutant Flatworld Explorers

解題心得:
用陣列紀錄如果超出範圍的前一個座標,如果那個座標曾被標記過,代表這次可以忽略。

程式碼:
#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;
}

沒有留言:

張貼留言