社区讨论
求大佬帮助,感觉思路没问题,但是案例都过不去> <
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 条回复,欢迎继续交流。
正在加载回复...