屎山代码样例都过不了
查看原帖
屎山代码样例都过不了
311315
lsx_nsgl楼主2024/10/24 20:55
using namespace std;
int N,M;
int s[60][60];
int t[60][60];
int vx[5]={0,0,-1,0,1},vy[5]={0,-1,0,1,0};
int xx1,xx2,yy1,yy2;
char face;
void dfs(int ax,int ay,int f,int ti){
	t[ax][ay]=ti;
	if(ax==xx2&&ay==yy2) return; 
	if(s[ax+vx[f]][ay+vy[f]]!=1&&ax+vx[f]>=1&&ax+vx[f]<=N&&ay+vy[f]>=1&&ay+vy[f]<=M){
		if(t[ax+vx[f]][ay+vy[f]]<t[ax][ay]+1) return;
		dfs(ax+vx[f],ay+vy[f],f,ti+1); 
	} //creep 向前 
	if(s[ax+2*vx[f]][ay+2*vy[f]]!=1&&ax+2*vx[f]>=1&&ax+2*vx[f]<=N&&ay+2*vy[f]>=1&&ay+2*vy[f]<=M){
		if(t[ax+2*vx[f]][ay+2*vy[f]]<t[ax][ay]+1) return;
		dfs(ax+2*vx[f],ay+2*vy[f],f,ti+1); 
	} //walk 向前 
	if(s[ax+3*vx[f]][ay+3*vy[f]]!=1&&ax+3*vx[f]>=1&&ax+3*vx[f]<=N&&ay+3*vy[f]>=1&&ay+3*vy[f]<=M){
		if(t[ax+3*vx[f]][ay+3*vy[f]]<t[ax][ay]+1) return;
		dfs(ax+3*vx[f],ay+3*vy[f],f,ti+1); 
	} //run 向前 
	f++;
	if(f==5) f=1;
	
	if(s[ax+vx[f]][ay+vy[f]]!=1&&ax+vx[f]>=1&&ax+vx[f]<=N&&ay+vy[f]>=1&&ay+vy[f]<=M){
		if(t[ax+vx[f]][ay+vy[f]]<t[ax][ay]+2) return;
		dfs(ax+vx[f],ay+vy[f],f,ti+2); 
	} //creep 向左 
	if(s[ax+2*vx[f]][ay+2*vy[f]]!=1&&ax+2*vx[f]>=1&&ax+2*vx[f]<=N&&ay+2*vy[f]>=1&&ay+2*vy[f]<=M){
		if(t[ax+2*vx[f]][ay+2*vy[f]]<t[ax][ay]+2) return;
		dfs(ax+2*vx[f],ay+2*vy[f],f,ti+2); 
	} //walk 向左 
	if(s[ax+3*vx[f]][ay+3*vy[f]]!=1&&ax+3*vx[f]>=1&&ax+3*vx[f]<=N&&ay+3*vy[f]>=1&&ay+3*vy[f]<=M){
		if(t[ax+3*vx[f]][ay+3*vy[f]]<t[ax][ay]+2) return;
		dfs(ax+3*vx[f],ay+3*vy[f],f,ti+2); 
	} //run 向左 
	f++;
	if(f==5) f=1;
	
	if(s[ax+vx[f]][ay+vy[f]]!=1&&ax+vx[f]>=1&&ax+vx[f]<=N&&ay+vy[f]>=1&&ay+vy[f]<=M){
		if(t[ax+vx[f]][ay+vy[f]]<t[ax][ay]+3) return;
		dfs(ax+vx[f],ay+vy[f],f,ti+3); 
	} //creep 向后 
	if(s[ax+2*vx[f]][ay+2*vy[f]]!=1&&ax+2*vx[f]>=1&&ax+2*vx[f]<=N&&ay+2*vy[f]>=1&&ay+2*vy[f]<=M){
		if(t[ax+2*vx[f]][ay+2*vy[f]]<t[ax][ay]+3) return;
		dfs(ax+2*vx[f],ay+2*vy[f],f,ti+3); 
	} //walk 向后 
	if(s[ax+3*vx[f]][ay+3*vy[f]]!=1&&ax+3*vx[f]>=1&&ax+3*vx[f]<=N&&ay+3*vy[f]>=1&&ay+3*vy[f]<=M){
		if(t[ax+3*vx[f]][ay+3*vy[f]]<t[ax][ay]+3) return;
		dfs(ax+3*vx[f],ay+3*vy[f],f,ti+3); 
	} //run 向后 
	f++;
	if(f==5) f=1;
	
	if(s[ax+vx[f]][ay+vy[f]]!=1&&ax+vx[f]>=1&&ax+vx[f]<=N&&ay+vy[f]>=1&&ay+vy[f]<=M){
		if(t[ax+vx[f]][ay+vy[f]]<t[ax][ay]+2) return;
		dfs(ax+vx[f],ay+vy[f],f,ti+2); 
	} //creep 向右 
	if(s[ax+2*vx[f]][ay+2*vy[f]]!=1&&ax+2*vx[f]>=1&&ax+2*vx[f]<=N&&ay+2*vy[f]>=1&&ay+2*vy[f]<=M){
		if(t[ax+2*vx[f]][ay+2*vy[f]]<t[ax][ay]+2) return;
		dfs(ax+2*vx[f],ay+2*vy[f],f,ti+2); 
	} //walk 向右 
	if(s[ax+3*vx[f]][ay+3*vy[f]]!=1&&ax+3*vx[f]>=1&&ax+3*vx[f]<=N&&ay+3*vy[f]>=1&&ay+3*vy[f]<=M){
		if(t[ax+3*vx[f]][ay+3*vy[f]]<t[ax][ay]+2) return;
		dfs(ax+3*vx[f],ay+3*vy[f],f,ti+2); 
	} //run 向右
	f++;
	return;
}
int main(){
	cin>>N>>M;
	for(int i=1;i<=N;i++){
		for(int j=1;j<=M;j++) t[i][j]=9;
	}
	for(int i=1;i<=N;i++){
		for(int j=1;j<=M;j++) cin>>s[i][j];
	}
	cin>>xx1>>yy1>>xx2>>yy2;
	cin>>face;
	int ff;
	if(face=='N') ff=1;  
	if(face=='E') ff=4;  
	if(face=='S') ff=3;
	if(face=='W') ff=2;
	dfs(xx1,yy1,ff,0);
	for(int i=1;i<=N;i++){
		for(int j=1;j<=M;j++) cout<<t[j][i]<<" ";
		cout<<endl;
	}
	cout<<t[xx2][yy2];
	return 0;
}

// 1 
//2 4
// 3

北1,西2 ,南3,东4,屎山代码不知道哪里出问题了

2024/10/24 20:55
加载中...