社区讨论

30求调,回复必关注

P1518[USACO2.4] 两只塔姆沃斯牛 The Tamworth Two参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m1csk9rw
此快照首次捕获于
2024/09/22 07:39
去年
此快照最后确认于
2025/11/04 19:58
4 个月前
查看原帖
以下是代码,思路见注释,想知道为什么只有30
(而且我第一个检测点下载的数据本地测试能过,也WA了)
CPP
#include<stdio.h>
char map[12][12];
int time=0;
int cx,cy;
int fx,fy;
int main()
{
  //边界设置为障碍
    for(int i=0;i<12;i++)
    {
        map[0][i]='*';
        map[11][i]='*';
    }
    for(int i=0;i<12;i++)
    {
        map[i][0]='*';
        map[i][11]='*';
    }
  //读取地图,同时读取并清空CF的位置
    for(int i=1;i<11;i++)
    {
        for(int j=1;j<11;j++)
        {
            scanf("%c",&map[i][j]);
            if(map[i][j]=='C')
            {
                cx=i;
                cy=j;
                map[i][j]='.';
            }
            if(map[i][j]=='F')
            {
                fx=i;
                fy=j;
                map[i][j]='.';
            }
        }
        getchar();
    }
  //flag表示方向
    int flagf=1;
    int flagc=1;
    for(;;)
    {
        if(cx==fx&&cy==fy)
        {
            printf("%d",time);
            return 0;
        }
        if(time>100000)//投机取巧QWQ
        {
            printf("0");
            return 0;
        }
      //牛移动
        if(flagc%4==2)
        {
            if(map[cx][cy+1]=='*')
            {
                flagc++;
            }
            else if(map[cx][cy+1]=='.')
            {
                cy++;
            }
        }
        else if(flagc%4==3)
        {
            if(map[cx+1][cy]=='*')
            {
                flagc++;
            }
            else if(map[cx+1][cy]=='.')
            {
                cx++;
            }
        }
        else if(flagc%4==0)
        {
            if(map[cx][cy-1]=='*')
            {
                flagc++;
            }
            else if(map[cx][cy-1]=='.')
            {
                cy--;
            }
        }
        else if(flagc%4==1)
        {
            if(map[cx-1][cy]=='*')
            {
                flagc++;
            }
            else if(map[cx-1][cy]=='.')
            {
                cx--;
            }
        }
      //人移动
        if(flagf%4==2)
        {
            if(map[fx][fy+1]=='*')
            {
                flagf++;
            }
            else if(map[fx][fy+1]=='.')
            {
                fy++;
            }
        }
        else if(flagf%4==3)
        {
            if(map[fx+1][fy]=='*')
            {
                flagf++;
            }
            else if(map[fx+1][fy]=='.')
            {
                fx++;
            }
        }
        else if(flagf%4==0)
        {
            if(map[fx][fy-1]=='*')
            {
                flagf++;
            }
            else if(map[fx][fy-1]=='.')
            {
                fy--;
            }
        }
        else if(flagf%4==1)
        {
            if(map[fx-1][fy]=='*')
            {
                flagf++;
            }
            else if(map[fx-1][fy]=='.')
            {
                fx--;
            }
        }
        time++;
    }
}

感谢你看到这里!求解惑

回复

5 条回复,欢迎继续交流。

正在加载回复...