首页 > 代码库 > poj 2632

poj 2632

题意:一个房间由m*n个方块组成  每个机器人占据一个方块  这些机器人能够移动  问 这些机器人的移动动作全部完成后 会不会发生冲撞事件

解题策略:简单的模拟题目

#include<iostream>
#include<cstring>
using namespace std;
struct Node
{ 
    int x,y;
    int dir;
}p[10000],map[111][111];
int dir[4][2]={1,0,-1,0,0,-1,0,1};
int main()
{
    char c;
    int t,x,y;
    int m,n,i;
    int sum,instu;
    bool ok;
    cin>>t;
    while(t--)
    {
        cin>>m>>n;
        memset(map,0,sizeof(map));
        cin>>sum>>instu;
        for(i=1;i<=sum;i++)
        {
            cin>>x>>y>>c;
            switch(c)
            {
            case N:p[i].x=x;p[i].y=y;p[i].dir=1;break;
            case S:p[i].x=x;p[i].y=y;p[i].dir=2;break;
            case W:p[i].x=x;p[i].y=y;p[i].dir=3;break;
            case E:p[i].x=x;p[i].y=y;p[i].dir=4;break;
            }
            map[x][y].dir=i;
        }
        ok=false;
        while(instu--)
        {
            cin>>x>>c>>y;
            if(ok) continue;
            if(c==L)
            {
                for(i=1;i<=y;i++)
                {
                    
                    if(p[x].dir==1) p[x].dir=3;
                    else if(p[x].dir==2) p[x].dir=4;
                    else if(p[x].dir==3) p[x].dir=2;
                    else p[x].dir=1;
                }
            }
            if(c==R)
            {
                for(i=1;i<=y;i++)
                {
                    if(p[x].dir==1) p[x].dir=4;
                    else if(p[x].dir==2) p[x].dir=3;
                    else if(p[x].dir==3) p[x].dir=1;
                    else p[x].dir=2;
                }
            }
            if(c==F)
            {
                for(i=1;i<=y;i++)
                {
                    map[p[x].x][p[x].y].dir=0;
                    p[x].y+=dir[p[x].dir-1][0];
                    p[x].x+=dir[p[x].dir-1][1];
                    if(map[p[x].x][p[x].y].dir)
                    {
                        cout<<"Robot "<<x<<" crashes into robot "<<map[p[x].x][p[x].y].dir<<endl;
                        break;
                    }
                    if(p[x].x>m||p[x].x<=0||p[x].y>n||p[x].y<=0)
                    {
                        cout<<"Robot "<<x<<" crashes into the wall"<<endl;
                        break;
                    }
                    map[p[x].x][p[x].y].dir=x;
                }
                if(i<=y) ok=true;
            }
        }
        if(!ok)
            cout<<"OK"<<endl;
    }
    return 0;
}