社区讨论
第一个帮忙调通,奉上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 条回复,欢迎继续交流。
正在加载回复...