1 条题解
-
0
多源bfs模板题。
当有多个初始状态时,我们可以将它们全部加入队列中,然后正常进行处理即可。前提是把这几个初始状态放进同一个队列不会干扰有序性,否则就需要考虑开多个队列。
还需要注意一个小坑: 和 的范围是不同的。
#include<bits/stdc++.h> using namespace std; const int N=505,M=1e5+5,d[4][2]={1,0,-1,0,0,1,0,-1}; int n,m,a1,b1,ans[N][N]; struct node{ int x,y; }a[M]; queue<node> q; void bfs(){ memset(ans,0x3f,sizeof(ans)); for(int i=1;i<=a1;i++){ ans[a[i].x][a[i].y]=0; q.push(a[i]); } while(!q.empty()){ int x=q.front().x,y=q.front().y; q.pop(); for(int i=0;i<4;i++){ int xx=x+d[i][0],yy=y+d[i][1]; if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&ans[xx][yy]>ans[x][y]+1){ ans[xx][yy]=ans[x][y]+1; q.push({xx,yy}); } } } } int main(){ scanf("%d%d%d%d",&n,&m,&a1,&b1); for(int i=1;i<=a1;i++) scanf("%d%d",&a[i].x,&a[i].y); bfs(); for(int i=1,x,y;i<=b1;i++){ scanf("%d%d",&x,&y); printf("%d\n",ans[x][y]); } return 0; }
- 1
信息
- ID
- 773
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 89
- 已通过
- 52
- 上传者