poj 2632 模拟

来源:互联网 发布:linux 开启服务 编辑:程序博客网 时间:2024/05/22 16:07
#include <stdio.h>#include <string.h>struct pos{    int x, y;} p[101];int map[101][101], flag;char dir[101];int a, b;void crash(int rob, char op){    switch (op)    {    case 'L':        switch (dir[rob])        {        case 'N':            dir[rob] = 'W';            break;        case 'W':            dir[rob] = 'S';            break;        case 'S':            dir[rob] = 'E';            break;        case 'E':            dir[rob] = 'N';        }        break;    case 'R':        switch (dir[rob])        {        case 'N':            dir[rob] = 'E';            break;        case 'E':            dir[rob] = 'S';            break;        case 'S':            dir[rob] = 'W';            break;        case 'W':            dir[rob] = 'N';        }        break;    case 'F':        map[p[rob].x][p[rob].y] = 0;        switch (dir[rob])        {        case 'N':            p[rob].y++;            break;        case 'E':            p[rob].x++;            break;        case 'S':            p[rob].y--;            break;        case 'W':            p[rob].x--;            break;        }        if (p[rob].x == 0 || p[rob].x == a + 1 || p[rob].y == 0 || p[rob].y == b + 1)        {            printf("Robot %d crashes into the wall\n", rob);            flag = 1;            return;        }        else if (map[p[rob].x][p[rob].y] != 0)        {            flag = 1;            printf("Robot %d crashes into robot %d\n", rob, map[p[rob].x][p[rob].y]);        }        map[p[rob].x][p[rob].y] = rob;    }}int main(void){    int k, n, m, x, y;    int i, j, rob, rep;    char d, op;    scanf("%d", &k);    while (k--)    {        memset(map, 0, sizeof(map));        flag = 0;        scanf("%d %d", &a, &b);        scanf("%d %d", &n, &m);        for (i = 1; i <= n; i++)        {            scanf("%d %d %c", &x, &y, &d);            map[x][y] = i;            dir[i] = d;            p[i].x = x, p[i].y = y;        }        for (i = 0; i < m; i++)        {            scanf("%d %c %d", &rob, &op, &rep);            if (flag) continue;            while (rep-- && !flag)                crash(rob, op);        }        if (!flag)            printf("OK\n");    }    return 0;}

原创粉丝点击