求助!1个MLE!
查看原帖
求助!1个MLE!
1046228
yezicong1104楼主2024/4/4 19:36
#include<bits/stdc++.h>
using namespace std;

int n,f[105][105];
char a[105][105];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
bool flag[105][105][4];
struct node{
	int x,y;
};

void bfs(int xa,int ya) {
	queue<node> q;
	q.push((node){xa,ya});
	f[xa][ya]=0,flag[xa][ya][0]=flag[xa][ya][1]=flag[xa][ya][2]=flag[xa][ya][3]=1;
	while(!q.empty()) {
		node dq=q.front();
		q.pop();
		for(int i=0;i<4;++i) {
			int xx=dq.x+dx[i],yy=dq.y+dy[i];
			int c;
			if(flag[dq.x][dq.y][i]) c=f[dq.x][dq.y];
			else c=f[dq.x][dq.y]+1;
			if(xx>=1 && xx<=n && yy>=1 && yy<=n && a[xx][yy]!='x' && (f[xx][yy]==-1 || c<=f[xx][yy])) {
				if(c<f[xx][yy]) flag[xx][yy][0]=flag[xx][yy][1]=flag[xx][yy][2]=flag[xx][yy][3]=0;
				flag[xx][yy][i]=1;
				f[xx][yy]=c;
				q.push((node){xx,yy});
				if(a[xx][yy]=='B') return;
			}
		}
	}
}

int main() {
	memset(f,-1,sizeof(f));
	cin>>n;
	int x,y,xb,yb;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j) {
			cin>>a[i][j];
			if(a[i][j]=='A') x=i,y=j;
			if(a[i][j]=='B') xb=i,yb=j;
		}
	bfs(x,y);
	cout<<f[xb][yb];
	return 0;
}
2024/4/4 19:36
加载中...