usaco 2.4 ttwo

来源:互联网 发布:关于网络的英语作文 编辑:程序博客网 时间:2024/05/21 06:31

模拟,用cx,cy和jx,jy记录牛和人的坐标,cd,jd分别记录牛和人的方向。用walk[][]表示四个方向的操作。用do_walk()执行。

#include <iostream>#include <cstdio>#define walk_time 1000using namespace std;char m[10][10];int jx,jy,cx,cy,cd,jd;int walk[][2] = {{-1,0},                {0,+1},                {+1,0},                {0,-1},                };int ct;void do_walk(int &wa,int &x,int &y){    int next_x,next_y;    next_x = x + walk[wa][0];    next_y = y + walk[wa][1];    if (next_x>=0&&next_x<10&&next_y>=0&&next_y<10&&m[next_x][next_y]!='*')    {        x = next_x;        y = next_y;    }else    {        wa = (wa+1)%4;    }    return;}int main(){    freopen("ttwo.in","r",stdin);    freopen("ttwo.out","w",stdout);    for (int i=0;i<10;i++)    {        for (int j=0;j<9;j++)        {            scanf("%c",&m[i][j]);        }        scanf("%c\n",&m[i][9]);    }    for (int i=0;i<10;i++)    {        for (int j=0;j<10;j++)        {            if (m[i][j]=='C')            {                cx = i;                cy = j;            }else if (m[i][j]=='F')            {                jx = i;                jy = j;            }        }    }    ct = jd = cd = 0;    while(ct<walk_time)    {        if (cx==jx&&cy==jy)        {            break;        }        do_walk(cd,cx,cy);        do_walk(jd,jx,jy);        ct++;    }    if (ct==walk_time)        printf("0\n");    else        printf("%d\n",ct);    return 0;}


原创粉丝点击