代码如下求大佬指点!!!!!!!!
查看原帖
代码如下求大佬指点!!!!!!!!
939526
jy20091121楼主2023/8/19 09:00
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[60][60];
bool f[60][60];
int t[3]={1,2,3};
bool go=true;
bool pd(int x,int y){
	if(a[x][y]==1) go=false;
	return x<=n&&x>=1&&y<=m&&y>=1&&!f[x][y]&&go;
}
struct re{
	int x,y;
	long long fx;
	int z;
};
int main(){
	queue<re> q;
	double s=clock();
	cin>>n>>m;
	for(int i=1;i<=n;i++){
	for(int j=1;j<=m;j++) cin>>a[i][j];	
	}
	int x1,y1,x2,y2;
	char wz;
	cin>>x1>>y1>>x2>>y2>>wz;
	if(wz=='N'){
	q.push((re){x1,y1,1,0});	
	}
	else if(wz=='S'){
	q.push((re){x1,y1,3,0});	
	}
	else if(wz=='E'){
	q.push((re){x1,y1,2,0});
	}
	else{
	q.push((re){x1,y1,4,0});	
	}
	
	while(!q.empty()){
	if((clock()-s)/CLOCKS_PER_SEC>=0.96){
	cout<<-1;
	return 0;	
	}
	re x;
	x=q.front();
	if(x.x ==x2&&x.y ==y2){
	cout<<x.z<<endl;
	return 0;
	}
	q.pop();
	go=true;
	for(int i=0;i<=2;i++){
if(x.fx%4==1){
if(pd(x.x-t[i],x.y)){
	//f[x.x-t[i]][x.y]=true;
q.push((re){x.x-t[i],x.y,x.fx,x.z+1 });	
}
	}
	else if(x.fx%4==2){
if(pd(x.x ,x.y+t[i])){
	//f[x.x][x.y+t[i]]=true;
q.push((re){x.x,x.y+t[i],x.fx ,x.z+1});	
}
	}
else if(x.fx%4==3){
 if(pd(x.x+t[i],x.y)){
q.push((re){x.x+t[i],x.y,x.fx,x.z+1});	
	//f[x.x+t[i]][x.y ]=true;
	}
}
else{
if(pd(x.x,x.y-t[i])){
	//f[x.x][x.y-t[i]]=true;  
q.push((re){x.x,x.y-t[i],x.fx,x.z+1});	
}
}
}
q.push((re){x.x,x.y,x.fx+3,x.z+1});
q.push((re){x.x,x.y,x.fx+5,x.z+1});
}
}
2023/8/19 09:00
加载中...