7分求助
查看原帖
7分求助
1101581
12345xxx楼主2024/8/3 18:56

只有一个点过了,样例输了个0 (这已经是第N篇求助帖了)

求dalao帮我看一下啊

#include<bits/stdc++.h>
using namespace std;
int dx[5]={0,0,-1,0,1};//方向数组
int dy[5]={0,-1,0,1,0};
int a[305][305];
struct node{
	int x,y;
};
int m;
int k[305][305];
bool b[305][305];
queue<node> q;
int check(int now){//标记
	if(now==-1){
		return 99999;
	}
	else{
		return now;
	}
}
int main(){
	cin>>m;
	for(int i=0;i<=305;i++){
		for(int j=0;j<=305;j++){
			k[i][j]=-1;
		}
	}
	for(int i=1;i<=m;i++){
		int t,x,y;
		cin>>t>>x>>y;
		for(int j=0;j<=4;j++){
			int tmpx=x+dx[j];
			int tmpy=y+dy[j];
			if(tmpx>=0&&tmpy>=0&&(k[tmpx][tmpy]==-1||k[tmpx][tmpy]>t)){
				k[tmpx][tmpy]=t;
			}
		}
	}
	q.push({0,0});	//bfs
	b[0][0]=1;
	while(!q.empty()){
		node u=q.front();
		q.pop();
		int v=a[u.x][u.y]+1;
		if(k[u.x][u.y]==-1){
			cout<<v-1;
			return 0;
		}
		for(int i=1;i<=4;i++){
			int nx=u.x+dx[i];
			int ny=u.y+dy[i];
			if(nx>=0&&ny>=0&&v<check(k[nx][ny])&&b[nx][ny]==0){
				q.push({nx,ny});
				b[nx][ny]=1;
				a[nx][ny]=v;
			}
		}
	}
	cout<<-1;
	return 0;
}

借鉴了一下题解

帮我看看吧,谢谢了Orz

2024/8/3 18:56
加载中...