您的位置:首页 > 其它

poj 2632

2013-01-04 17:34 148 查看
没有算法的题目不见得没有练习价值

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

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

#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 lines
struct 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: