两只塔姆沃斯牛 The Tamworth Two(转向问题)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重点:学会用数字加减取余表示方向

#include<cstdio>
char mp[15][15];
int x1,y1,x2,y2,k1=0,k2=0,t=0;//k=0,1,2,3分别代表北,东,南,西 
void  cback(){
	switch(k1){
		case 0:{
			if(mp[x1-1][y1]=='*'||x1-1<0){
				k1=(k1+1)%4;//顺时针转向 
			}else{
				x1--;//向上走一步; 
			}
			break;
		}
		case 1:{
			if(mp[x1][y1+1]=='*'||y1+1>=10){
				k1=(k1+1)%4;
			}else{
				y1++;
			}
			break;
		}
		case 2:{
			if(mp[x1+1][y1]=='*'||x1+1>=10){
				k1=(k1+1)%4;
			}else{
				x1++;
			}
			break;
		}
		case 3:{
			if(mp[x1][y1-1]=='*'||y1-1<0){
				k1=(k1+1)%4;
			}else{
				y1--;
			}
			break;
		}
	}
}
void  fback(){
	switch(k2){
		case 0:{
			if(mp[x2-1][y2]=='*'||x2-1<0){
				k2=(k2+1)%4;
			}else{
				x2--;//向上走一步; 
			}
			break;
		}
		case 1:{
			if(mp[x2][y2+1]=='*'||y2+1>=10){
				k2=(k2+1)%4;
			}else{
				y2++;
			}
			break;
		}
		case 2:{
			if(mp[x2+1][y2]=='*'||x2+1>=10){
				k2=(k2+1)%4;
			}else{
				x2++;
			}
			break;
		}
		case 3:{
			if(mp[x2][y2-1]=='*'||y2-1<0){
				k2=(k2+1)%4;
			}else{
				y2--;
			}
			break;
		}
	}
}
int main(){
	for(int i=0;i<10;i++){
		scanf("%s",mp[i]);
	}
	for(int i=0;i<10;i++){
		for(int j=0;j<10;j++){
			if(mp[i][j]=='C'){
				x1=i;
				y1=j;
			}
			if(mp[i][j]=='F'){
				x2=i;
				y2=j;
			}
		}
	}
	while(1){
		cback();//牛走 
		fback();//人走 
		t++;
		//printf("x1=%d y1=%d k1=%d t=%d\n",x1,y1,k1,t);
		//printf("x2=%d y2=%d k2=%d t=%d\n",x2,y2,k2,t);
		if(x1==x2&&y1==y2){
			break;
		}
		if(t>1000){
			printf("0");
			return 0;
		}
	}
	printf("%d",t);
	return 0;
} 
发布了160 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Anterior_condyle/article/details/104997092