社区讨论

第一个帮忙调通,奉上10元,拜托

P2895[USACO08FEB] Meteor Shower S参与者 5已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mkq9esaw
此快照首次捕获于
2026/01/23 10:26
4 周前
此快照最后确认于
2026/01/23 19:56
4 周前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int m, maxt, a[310][310];
bool vis[310][310];
int dx[]={0, 1, 0,-1};
int dy[]={1, 0,-1, 0};
bool isvalid(int x, int y, int t){
	if(x>=0 && x<=300 && y>=0 && y<=300 && (a[x][y]>t || a[x][y]==-1)) return true;
	else return false;
}
int dfs(int x, int y, int t){
	if(a[x][y]==-1) return t;
	if(!isvalid(x,y,t)) return INT_MAX;
	int res=INT_MAX;
	vis[x][y]=true;
	for(int i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(!vis[nx][ny]) res=min(res, dfs(nx, ny, t+1));
	}
	vis[x][y]=false;
	return res;
}
int main(){
	cin>>m;
	memset(a, -1, sizeof(a));
	memset(vis, false, sizeof(vis));
	for(int i=0;i<m;i++){
		int x,y,t;
		cin>>x>>y>>t;
		if(a[x][y]>t || a[x][y]==-1) a[x][y]=t;
		for(int i=0;i<4;i++){
			int nx=x+dx[i];
			int ny=y+dy[i];
			if(isvalid(nx, ny, t)) a[nx][ny]=t;
		}
	}
	int res=dfs(0, 0, 0); 
	if(res!=INT_MAX)
		cout<<res;
	else
		cout<<-1;
	return 0;
}


回复

8 条回复,欢迎继续交流。

正在加载回复...