[BZOJ2252]矩阵距离(BFS)
题意
输入矩阵m行n列(m<=500,n<=500),只含0、1,输出离每个元素距离最近的1的距离,其中距离定义为D(aij,akl)=abs(i-k)+abs(j-l)。
示例:
输入:
3 4
0 0 0 1
0 0 1 1
0 1 1 0
输出:
3 2 1 0
2 1 0 0
1 0 0 1
解体思路
把所有1点入队,然后BFS。这样每个点只遍历一遍。
题解
#include <stdio.h>
#include <queue>
using namespace std;
int m,n;
int a[505][505];
queue<pair<int, int>> pointQ;
int dis[505][505];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
bool bound(int x,int y){
return x>=0&&y>=0&&x<=m&&y<=n;
}
void bfs(){
while(!pointQ.empty()){
pair<int,int> point=pointQ.front();
pointQ.pop();
int x=point.first;
int y=point.second;
for(int i=0;i<4;++i){
int xx=x+dx[i];
int yy=y+dy[i];
if(bound(xx, yy)&&dis[xx][yy]==-1){
dis[xx][yy]=dis[x][y]+1;
pointQ.push(make_pair(xx, yy));
}
}
}
}
int main(int argc, const char * argv[]) {
memset(dis, -1, sizeof(dis));
scanf("%d %d",&m,&n);
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
scanf("%d",&a[i][j]);
if(a[i][j]==1){
pointQ.push(make_pair(i, j));
dis[i][j]=0;
}
}
}
bfs();
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
if(j==n-1){
printf("%d\n",dis[i][j]);
}
else{
printf("%d ",dis[i][j]);
}
}
}
return 0;
}
[BZOJ2252]矩阵距离(BFS)的更多相关文章
- bzoj2252 矩阵距离
很好奇这种 普及- 的题为什么会是权限题...... 我一开始想用枚举 + 搜索,看书后发现自己脑抽了.直接BFS即可. #include <cstdio> #include <qu ...
- BZOJ2252: [2010Beijing wc]矩阵距离
题解: 我脑子里都是翔??? bfs一下就行了 我居然还想什么kd tree!真是too naive,,, #include<cstdio> #include<cstdlib> ...
- BZOJ 2252: [2010Beijing wc]矩阵距离
题目 2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec Memory Limit: 256 MB Description 假设我们有矩阵,其元素值非零即1 ...
- Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 563 Solved: 274[Submit][ ...
- 「CH2501」 矩阵距离 解题报告
CH2501 矩阵距离 描述 给定一个N行M列的01矩阵 A,\(A[i][j]\) 与 \(A[k][l]\) 之间的曼哈顿距离定义为: \(dist(A[i][j],A[k][l])=|i-k|+ ...
- 【BFS】bzoj2252 [2010Beijing wc]矩阵距离
要注意一开始将所有为'1'的点入队,然后通过一次BFS去更新所有点的距离,直到无法更新为止. #include<cstdio> #include<queue> #include ...
- 2501 矩阵距离 (bfs)
描述 给定一个N行M列的01矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i-k|+|j-l| 输出一个N行M列的整数矩阵B,其 ...
- AcWing:173. 矩阵距离(bfs)
给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...
- acwing 173. 矩阵距离(bfs)
给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...
随机推荐
- 前端反爬虫策略--font-face 猫眼数据爬取
1 .font-face定义了字符集,通过unicode去印射展示. 2 .font-face加载网络字体,我么可以自己创建一套字体,然后自定义一套字符映射关系表例如设置0xefab是映射字符1, ...
- Asp.NET 简易通用WebServices 附件服务
[toc] 总述: 用了很久的附件分离服务, .NET 2.0平台开始使用. 配置好服务后, 由调用端定义并管理目录级次. 调用端存储目录即可. 附件服务: 相应配置节点放入 web.confi ...
- CSS animation-delay:规定动画何时开始
在CSS中animation-delay的属性为规定动画何时开始.主机吧本文详细介绍下animation-delay的定义和用法.animation-delay的语法.animation-delay的 ...
- tongweb安装后无法启动问题
安装后执行bin下的启动文件,但是管理界面依然无法打开 1.确认破解的dat文件是否在跟目录下,是否过期 2.如果jdk64位试试下面的方法:JAVA_HOME/jre/lib/ext/下缺少包 su ...
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- Linux环境安装、卸载Docker
安装: 1.Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安账docker 2.更新yum包:sudo yum update 3. ...
- R开发环境搭建
1.准备集成开发环境(IDE) R语言在一个好的IDE工具上应用才能更好的发挥它的作用,目前使用的最多的R语言集成开发环境是R STUDIO,下载地址为:https://www.rstudio.com ...
- PID控制器介绍
在维基百科上查到的PID的介绍,收藏一下,慢慢看. https://zh.wikipedia.org/wiki/PID%E6%8E%A7%E5%88%B6%E5%99%A8#%E6%AF%94%E4% ...
- centos7配置网易yum源
部分参考centos6: https://blog.csdn.net/jinzhencs/article/details/53673999 下载yum: https://www.cnblogs.co ...
- python的str.format方法
format方法被用于字符串的格式化输出. print('{0}+{1}={2}'.format(1,2,1+2)) #in 1+2=3 #out 可见字符串中大括号内的数字分别对应着format的几 ...