萌新刚学OI 0.01秒,求助
查看原帖
萌新刚学OI 0.01秒,求助
722747
封禁用户楼主2022/10/14 21:35
#include<bits/stdc++.h>
using namespace std;
#define maxn 32
struct u{
	int x,y,x1,y1,stp;
};
bool rec[maxn][maxn][maxn][maxn];
int T[maxn][maxn],n,m,q;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
void bfs(int e_x,int e_y,int s_x,int s_y,int t_x,int t_y){
	memset(rec,0,sizeof(rec));
	queue<u> Q;
	Q.push((u){e_x,e_y,s_x,s_y,0});
	rec[e_x][e_y][s_x][s_y]=1;
	while(!Q.empty()){
		u hd=Q.front();
		if(hd.x1==t_x && hd.y1==t_y){
			cout<<hd.stp<<endl;
			return;
		}
		for(int i=0;i<4;i++){
			int nx=hd.x+dx[i],ny=hd.y+dy[i];
			if(nx<1 || nx>n || ny<1 ||ny>m) continue; 
			if(T[nx][ny]==0) continue;
			int nx1=hd.x1,ny1=hd.y1;
			if(nx==hd.x1 && ny==hd.y1){
			    nx1==hd.x;
			    ny1=hd.y;
			}
			if(rec[nx][ny][nx1][ny1]==1) continue;
			rec[nx][ny][nx1][ny1]=1;
			Q.push((u){nx,ny,nx1,ny1,hd.stp+1});
		}
		Q.pop();
	} 
	cout<<"-1"<<endl;
}
int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>T[i][j];
	for(int i=1,ex,ey,sx,sy,tx,ty;i<=q;i++){
		cin>>ex>>ey>>sx>>sy>>tx>>ty;
		bfs(ex,ey,sx,sy,tx,ty);
	}
	return 0;
}
//qaq
//awa
//ovo

只AC了一个点,可爱妹子求助

2022/10/14 21:35
加载中...