一、题目部分
选自洛谷:
二、解题过程
思路
见“提交AC答案”部分给出的注释
提交AC答案
#include<bits/stdc++.h>
using namespace std;
char mp[11][11];//存储输入的地图
int cx,cy,fx,fy;//记录两头牛和Farmer John的位置
int dc,df;//记录两头牛和Farmer John的行动方向
int ans;//存储相遇所需的时间
int main()
{
//按输入样例输入地图
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
cin>>mp[i][j];
//****检验输入是否成功****
// cout<<endl;
// for(int i=0;i<10;i++)
// {
// for(int j=0;j<10;j++)
// cout<<mp[i][j];
// cout<<endl;
// }
//记录两头牛和Farmer John的初始位置
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(mp[i][j]=='C')
{
cx=i;
cy=j;
}
if(mp[i][j]=='F')
{
fx=i;
fy=j;
}
}
}
//记录两头牛和Farmer John的初始位置
//1朝北,2朝东,3朝南,4朝西
dc=1;
df=1;
//移动并计算时间,直到两头牛和Farmer John相遇退出循环
while((cx!=fx||cy!=fy)&&ans<=10000)
{
//两头牛移动方式及条件判断
if(dc==1)
{
if(cx-1<0||mp[cx-1][cy]=='*')
dc=2;
else
cx-=1;
}
else if(dc==2)
{
if(cy+1>=10||mp[cx][cy+1]=='*')
dc=3;
else
cy+=1;
}
else if(dc==3)
{
if(cx+1>=10||mp[cx+1][cy]=='*')
dc=4;
else
cx+=1;
}
else if(dc==4)
{
if(cy-1<0||mp[cx][cy-1]=='*')
dc=1;
else
cy-=1;
}
//Farmer John同理
if(df==1)
{
if(fx-1<0||mp[fx-1][fy]=='*')
df=2;
else
fx-=1;
}
else if(df==2)
{
if(fy+1>=10||mp[fx][fy+1]=='*')
df=3;
else
fy+=1;
}
else if(df==3)
{
if(fx+1>=10||mp[fx+1][fy]=='*')
df=4;
else
fx+=1;
}
else if(df==4)
{
if(fy-1<0||mp[fx][fy-1]=='*')
df=1;
else
fy-=1;
}
ans++;//记住每行动一次加1分钟
}
//如果John无法抓住牛,则输出0
//为保险起见还可以更大,超出10000分钟抓不到是按常识推测的,能过测试点
if(ans>10000)
printf("%d",0);
else
printf("%d",ans);
return 0;
}