poj 2632

来源:互联网 发布:淘宝手机助手官方版 编辑:程序博客网 时间:2024/05/22 00:31

没有算法的题目不见得没有练习价值

这个题也是一个挺好的练习

模拟每一步的进行,细心不出错

#include <iostream>#include <vector>#include <map>#include <list>#include <set>#include <deque>#include <stack>#include <queue>#include <algorithm>#include <cmath>#include <cctype>#include <cstdio>#include <iomanip>#include <cmath>#include <cstdio>#include <iostream>#include <string>#include <sstream>#include <cstring>#include <queue>using namespace std;///宏定义const int INF = 20000000;const int MAXN = 110;///全局变量 和 函数int K;int cols, rows;//A,B 在100之间,分别代表列和行int robotnums, instructions;//N linesstruct robotpos{    int row;    int col;    int dir;    int mark;};robotpos robotposs[MAXN];bool isOk(int ith){    int i, j;    if(robotposs[ith].row > rows || robotposs[ith].row <= 0 || robotposs[ith].col > cols || robotposs[ith].col <= 0)    {        printf("Robot %d crashes into the wall\n", ith);        return false;    }    for(i = 1; i <= robotnums; ++i)    {        if(i == ith)            continue;        if(robotposs[ith].row == robotposs[i].row && robotposs[ith].col == robotposs[i].col)        {            printf("Robot %d crashes into robot %d\n", ith, i);            return false;        }    }    return true;}int main(){///变量定义int i, j, k;///操作执行    scanf("%d", &K);     while(K--)    {        scanf("%d %d", &cols, &rows);        scanf("%d %d", &robotnums, &instructions);         //读入robotnums个机器人的初始位置和方向        for(i = 1; i <= robotnums; ++i)        {            char dirction;            scanf("%d %d %c", &robotposs[i].col, &robotposs[i].row, &dirction);              if(dirction == 'E')            {                robotposs[i].dir = 0;            }            else if(dirction == 'N')            {                robotposs[i].dir = 1;            }            else if(dirction == 'W')            {                robotposs[i].dir = 2;            }            else            {                robotposs[i].dir = 3;            }        }        //读入instructions条指令,并模拟之        bool flag = true;        int ithrobot, times;        char order;        for(i = 0; i < instructions; ++i)        {            scanf("%d %c %d", &ithrobot, &order, ×);            for(j = 0; j < times; ++j)            {                if(order == 'F')                {                    if(robotposs[ithrobot].dir == 0)                    {                        robotposs[ithrobot].col++;                        if(!isOk(ithrobot))                        {                            flag = false;                            break;                        }                    }                    else if(robotposs[ithrobot].dir == 1)                    {                        robotposs[ithrobot].row++;                        if(!isOk(ithrobot))                        {                            flag = false;                            break;                        }                    }                    else if(robotposs[ithrobot].dir == 2)                    {                        robotposs[ithrobot].col--;                        if(!isOk(ithrobot))                        {                            flag = false;                            break;                        }                    }                    else if(robotposs[ithrobot].dir == 3)                    {                        robotposs[ithrobot].row--;                        if(!isOk(ithrobot))                        {                            flag = false;                            break;                        }                    }                }                else if(order == 'L')                {                    robotposs[ithrobot].dir = (robotposs[ithrobot].dir + 1) % 4;                }                else if(order == 'R')                {                    robotposs[ithrobot].dir = (robotposs[ithrobot].dir - 1 + 4) % 4;                }            }            if(!flag)                break;        }        if(i < instructions)        {            for(i = i + 1 ; i < instructions; ++i)            {                scanf("%d %c %d", &ithrobot, &order, ×);            }        }        if(flag)            printf("OK\n");    }  ///结束return 0;}


 

原创粉丝点击