原题链接 来自洛谷https://www.luogu.com.cn/problem/P1518
#include <bits/stdc++.h>
using namespace std;
int num[15][15] = {0};
int Fx, Fy, Cx, Cy; // 坐标
int Ff[5][2] = {-1, 0, 0, 1, 1, 0, 0, -1}, Cf[5][2] = {-1, 0, 0, 1, 1, 0, 0, -1};
int main()
{
int i, j, t;
char c;
for (i = 1; i <= 10; i++)
{
for (j = 1; j <= 10; j++)
{
scanf("%c", &c);
if (c == '.') num[i][j] = 1;
else if (c == '*') continue;
else if (c == 'F')
{
num[i][j] = 1;
Fx = i;
Fy = j;
}
else if (c == 'C')
{
num[i][j] = 1;
Cx = i;
Cy = j;
}
}
getchar();
getchar();
}
int ff = 0, cf = 0; // 两者方向
for (i = 0; i < 100000000; i++)
{
//printf ("F_[%d,%d]%d C_[%d,%d]%d\n", Fx, Fy, ff, Cx, Cy, cf);
if (Fx == Cx && Fy == Cy) break; // 相遇
// 农民
if (num[Fx + Ff[ff][0] ][Fy + Ff[ff][1] ] == 0)
{
ff = (ff+1) % 4;
}
else
{
Fx += Ff[ff][0];
Fy += Ff[ff][1];
}
// 牛
if (num[Cx + Cf[cf][0] ][Cy + Cf[cf][1] ] == 0)
{
cf = (cf+1) % 4;
}
else
{
Cx += Cf[cf][0];
Cy += Cf[cf][1];
}
}
if (i >= 100000000) printf ("0");
else printf ("%d", i);
return 0;
}