1 条题解
-
0
预处理a[i][j]表示每个格子什么时候被烧毁,从(0,0)出发进行bfs,一旦搜索到一个永远不会被烧毁的地方,则说明找到安全位置,返回此时的时间
#include<bits/stdc++.h> using namespace std; const int N=305; int n,m,k,s,t,a[N][N],d[N][N],dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; queue<pair<int,int>> q; int bfs(){ memset(d,0x3f,sizeof(d)); d[0][0]=0; q.push({0,0}); while (!q.empty()){ int x=q.front().first; int y=q.front().second; q.pop(); if (a[x][y]==0x3f3f3f3f) return d[x][y]; for (int i=0;i<4;++i){ int _x=x+dx[i]; int _y=y+dy[i]; if (_x>=0 && _y>=0 && d[_x][_y]>d[x][y]+1 && d[x][y]+1<a[_x][_y]) { d[_x][_y]=d[x][y]+1; q.push({_x,_y}); } } } return -1; } int main(){ cin>>n;int x,y; memset(a,0x3f,sizeof(a)); for (int i=1;i<=n;++i){ cin>>x>>y>>t; a[x][y]=min(a[x][y],t); a[x+1][y]=min(a[x+1][y],t); a[x][y+1]=min(a[x][y+1],t); if (y>0) a[x][y-1]=min(a[x][y-1],t); if (x>0) a[x-1][y]=min(a[x-1][y],t); } cout<<bfs(); }
- 1
信息
- ID
- 766
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- 递交数
- 136
- 已通过
- 44
- 上传者