77分求助!
查看原帖
77分求助!
469694
kzx_union楼主2024/1/22 12:10

本人代码用了BFS,但却RE了3个点。有没有大佬帮帮我?

代码:

#include<bits/stdc++.h>
using namespace std;
int m,a[310][310],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
void bfs(int x,int y){
	int q[100100][3];
	int t=0,w=1;
	q[1][0]=x;
	q[1][1]=y;
	q[1][2]=0;
	do{
		t++;
		for(int i=0;i<=3;i++){
			int tx,ty;
			tx=q[t][0]+dx[i];
			ty=q[t][1]+dy[i];
			if(tx>=0&&ty>=0&&(q[t][2]+1<a[tx][ty]||a[tx][ty]==-1)){
				w++;
				q[w][0]=tx;
				q[w][1]=ty;
				q[w][2]=q[t][2]+1;
				if(a[tx][ty]==-1){
					cout<<q[w][2];
					return;
				}
				a[tx][ty]=0;
			}
		}
	}while(w>t);
	cout<<-1;
}
int main(){
	cin>>m;
	memset(a,-1,sizeof(a));
	for(int i=1;i<=m;i++){
		int mx,my,mt;
		cin>>mx>>my>>mt;
		if(mt<a[mx][my]||a[mx][my]==-1)
		a[mx][my]=mt;
		if(mt<a[mx+1][my]||a[mx+1][my]==-1)
		a[mx+1][my]=mt;
		if(mt<a[mx-1][my]||a[mx-1][my]==-1)
		a[mx-1][my]=mt;
		if(mt<a[mx][my+1]||a[mx][my+1]==-1)
		a[mx][my+1]=mt;
		if(mt<a[mx][my-1]||a[mx][my-1]==-1)
		a[mx][my-1]=mt;
	}
	bfs(0,0);
	return 0;
}
2024/1/22 12:10
加载中...