题目描述 https://www.luogu.org/problemnew/show/P1518
模拟模拟模拟 变量名像注意不能打错,只有遇到障碍或是边界才能转方向,也只能顺时针转
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool fl;
int a[15][15],ans=1e5,cx,cy,fx,fy;
int d[4][2]={{-1,0},{0,1},{1,0},{0,-1}};//0上1右2下3左
void dfs(int ncx,int ncy,int nfx,int nfy,int nc,int nf,int t)
{// 农夫的位置 牛的位置 农夫 牛的朝向 时间
if(ncx==nfx&&ncy==nfy)
{
ans=min(ans,t); fl=1;
return;
}
if(t>1e5) return;
int x1,y1,x2,y2,cc,ff; bool bc=0,bf=0;
x1=ncx+d[nc][0],y1=ncy+d[nc][1];
if(x1>=1&&x1<=10&&y1>=1&&y1<=10&&!a[x1][y1]) bc=1;//农夫能走
x2=nfx+d[nf][0],y2=nfy+d[nf][1];
if(x2>=1&&x2<=10&&y2>=1&&y2<=10&&!a[x2][y2]) bf=1;//牛能走
cc=(nc+1)%4,ff=(nf+1)%4;
if(bc&&bf) dfs(x1,y1,x2,y2,nc,nf,t+1);//都走不转
if(bc&&!bf) dfs(x1,y1,nfx,nfy,nc,ff,t+1);//农夫走 牛转
if(bf&&!bc) dfs(ncx,ncy,x2,y2,cc,nf,t+1);//农夫转 牛走
if(!bf&&!bc) dfs(ncx,ncy,nfx,nfy,cc,ff,t+1);//都转不走
}
int main()
{
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++)
{
char aa; cin>>aa;
if(aa=='*') a[i][j]=1;//不可走
if(aa=='C') cx=i,cy=j;//农夫的位置
if(aa=='F') fx=i,fy=j;//牛的位置
}
dfs(cx,cy,fx,fy,0,0,0);
if(fl) printf("%d",ans);
else puts("0");
return 0;
}