洛谷P1518 两只塔姆沃斯牛 The Tamworth Two【模拟】

该博客主要解析了洛谷上的P1518问题,即‘两只塔姆沃斯牛’的模拟挑战。内容强调在模拟过程中需要注意变量名的准确性,并指出在碰到障碍或边界时牛只能顺时针改变方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述 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;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值