社区讨论

求大佬帮助,感觉思路没问题,但是案例都过不去> <

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

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@m330mgxf
此快照首次捕获于
2024/11/04 20:46
去年
此快照最后确认于
2025/11/04 15:20
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int x;
int y;
int x2;
int y2;
int main()
{
    char a[11][11];
    for(int i=1; i<=10; i++)
        for(int j=1; j<=10; j++)
        {
            char x;
            cin>>x;
            a[i][j]=x;
        }
//
    for(int i=1; i<=10; i++)
        for(int j=1; j<=10; j++)
        {
            if(a[i][j]=='F')
            {
                x=i;
                y=j;
            }
            else if(a[i][j]=='C')
            {

                x2=i;
                y2=j;
            }
        }
//find初始坐标
    int n=0;
    int flag=1;
    int flag1=1;
    while(n<10000)// 循环次数开大
    {
//人
        if(flag==1&&a[x+1][y]!='*'&&x+1<=10)//如果移动的下一个位置不能是障碍物或者是边界
            x++;
        else if(flag==2&&a[x][y+1]!='*'&&y+1<=10)
            y++;
        else if(flag==3&&a[x-1][y]!='*'&&x-1>=1)
            x--;
        else if(flag==4&&a[x][y-1]!='*'&&y-1>=1)
            y--;
        else
            flag = (flag % 4) + 1;

        //牛
        if (flag1 == 1 && a[x2 + 1][y2] != '*' && x2 + 1 <= 10)
            x2++;
        else if (flag1 == 2 && a[x2][y2 + 1] != '*' && y2 + 1 <= 10)
            y2++;
        else if (flag1 == 3 && a[x2 - 1][y2] != '*' && x2 - 1 >= 1)
            x2--;
        else if (flag1 == 4 && a[x2][y2 - 1] != '*' && y2 - 1 >= 1)
            y2--;
        else
            flag1 = (flag1 % 4) + 1;
        n++;
        if(x==x2&&y==y2)
            break;
    }
    cout<<n;



}

回复

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

正在加载回复...