11分求助嘤嘤嘤~~,样例输出是2!
查看原帖
11分求助嘤嘤嘤~~,样例输出是2!
956316
77Glorious楼主2023/11/10 22:05

注释已写~

#include<bits/stdc++.h>
using namespace std;

struct object{
	int x,y;
	int dr;//direction方向,0123北东南西 
}f,c;//f农夫,c奶牛 

int m[15][15]={0},t=0;//将char地图int化便于判断和直接设定边界,即障碍物全为0,空地全为1 
int dx[4]={-1,0,1,0};//北东南西;
int dy[4]={0,1,0,-1};//北东南西 

void turn(){
int fx=f.x+dx[f.dr];
int cx=c.x+dx[c.dr];
int fy=f.y+dy[f.dr];
int cy=f.y+dy[c.dr];
	if(m[fx][fy]!=0){
		f.x=fx; f.y=fy;
	}//前方不是障碍就移动 
	else 
	{
		f.dr=(f.dr+1)%4;//0123方向循环 
	}//前方是障碍就变方向 

	if(m[cx][cy]!=0){
		c.x=cx; c.y=cy;
	}//前方不是障碍就移动 
	else 
	{
		c.dr=(c.dr+1)%4;//0123方向循环
	}//前方是障碍就变方向 	
	
	
}

int main(){	
	
	bool mark[11][11][4][11][11][4]={0};//判断数组,分别储存f和c的信息,进行记忆 


	char dt;//读入地图字符 
	for(int i=1;i<=10;i++)
		for(int j=1;j<=10;j++){
			cin>>dt;
			if(dt=='*') m[i][j]=0;//是障碍物就清零 
			else m[i][j]=1;
			if(dt=='C')
			{
				c.x=i; c.y=j; c.dr=0;
			}
			if(dt=='F')
			{
				f.x=i; f.y=j; f.dr=0;//方向都为北 
			}			 
		}//读入
		
	while(f.x!=c.x && c.x!=c.y){
		 	t++;

		 	if(mark[f.x][f.y][f.dr][c.x][c.y][c.dr]){
		 		cout<<0; return 0;//原来走过了,就判断为死循环结束程序 
			 } 
			mark[f.x][f.y][f.dr][c.x][c.y][c.dr]=1; 
			turn(); 
		 }
		
		 
	cout<<t;
	
	return 0;
}
2023/11/10 22:05
加载中...