求调代码,悬关
  • 板块灌水区
  • 楼主funeral
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/28 18:26
  • 上次更新2024/1/28 20:33:29
查看原帖
求调代码,悬关
1024189
funeral楼主2024/1/28 18:26

P1126

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int qx,qy,zx,zy;
char fang;

int mp[150][150];
int mp1[150][150];
int smp[150][150];
int vis[150][150];

struct H{
	int x,y,tim;
	char fangxiang;
};
queue<H> q;

int ans,anl;
void bfs(int a,int b){
	H now;
	while(!q.empty()){
		now=q.front();
		q.pop();
		
		int X=now.x,Y=now.y,T=now.tim;
		char F=now.fangxiang;
		
		if(vis[X][Y]||smp[X][Y]==1||X>n||Y>n||X<1||Y<1)continue;
		vis[X][Y]=1;
		
		if(X==zx&&Y==zy){
			ans=T+1;anl=1;
			return;
		}
		
		if(F=='N'){
			if(smp[X-1][Y]==0){
				q.push((H){X-1,Y,T+1,F});
				if(smp[X-2][Y]==0){
					q.push((H){X-2,Y,T+1,F});
					if(smp[X-3][Y]==0){
						q.push((H){X-3,Y,T+1,F});
					}
				}
			}
			F='S';q.push((H){X,Y,T+2,F});
			F='W';q.push((H){X,Y,T+1,F});
			F='E';q.push((H){X,Y,T+1,F});
//			F='N';q.push((H){X,Y,T+1,F});
			
		}else if(F=='S'){
			if(smp[X+1][Y]==0){
				q.push((H){X+1,Y,T+1,F});
				if(smp[X+2][Y]==0){
					q.push((H){X+2,Y,T+1,F});
					if(smp[X+3][Y]==0){
						q.push((H){X+3,Y,T+1,F});
					}
				}
			}
			F='N';q.push((H){X,Y,T+2,F});
			F='W';q.push((H){X,Y,T+1,F});
			F='E';q.push((H){X,Y,T+1,F});
//			F='N';q.push((H){X,Y,T+1,F});
			
		}else if(F=='E'){
			if(smp[X][Y+1]==0){
				q.push((H){X,Y+1,T+1,F});
				if(smp[X][Y+2]==0){
					q.push((H){X,Y+2,T+1,F});
					if(smp[X][Y+3]==0){
						q.push((H){X,Y+3,T+1,F});
					}
				}
			}
			F='S';q.push((H){X,Y,T+2,F});
			F='W';q.push((H){X,Y,T+1,F});
			F='N';q.push((H){X,Y,T+1,F});
//			F='N';q.push((H){X,Y,T+1,F});
			
		}else if(F=='W'){
			if(smp[X][Y-1]==0){
				q.push((H){X,Y-1,T+1,F});
				if(smp[X][Y-2]==0){
					q.push((H){X,Y-2,T+1,F});
					if(smp[X][Y-3]==0){
						q.push((H){X,Y-3,T+1,F});
					}
				}
			}
			F='S';q.push((H){X,Y,T+2,F});
			F='N';q.push((H){X,Y,T+1,F});
			F='E';q.push((H){X,Y,T+1,F});
//			F='N';q.push((H){X,Y,T+1,F});
		}
	}
	return;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mp[i][j];
			if(mp[i][j]==1)mp1[i+1][j+1]=1;
		}
	}
	for(int i=1;i<=n+1;i++){
		for(int j=1;j<=m+1;j++){
			if(mp1[i][j]==1){
  	    		mp1[i-1][j]=1;
				mp1[i][j-1]=1;
				mp1[i-1][j-1]=1;
			}
		}
	}
// 	for(int i=1;i<=n+1;i++){
//    	for(int j=1;j<=m+1;j++){
// 			cout<<mp1[i][j]<<" ";
// 		}
// 		cout<<endl;
// 	}
// 	cout<<endl;
 	
    for(int i=2;i<=n;i++){
        for(int j=2;j<=m;j++){
            smp[i-1][j-1]=mp1[i][j];
        }
    }
	
//    for(int i=1;i<n;i++){
//        for(int j=1;j<m;j++){
//            cout<<smp[i][j]<<" ";
//        }
//        cout<<endl;
//    }
	cin>>qx>>qy>>zx>>zy>>fang;
	if(qx==zx&&qy==zy){
		cout<<0; 
		return 0;
	}
	q.push((H){qx,qy,0,fang});
	vis[qx][qy]=1;
    bfs(qx,qy);
//    cout<<endl;
	if(anl)cout<<ans;
	else cout<<"-1";
	return 0;
}
2024/1/28 18:26
加载中...