博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing:173. 矩阵距离(bfs)
阅读量:5086 次
发布时间:2019-06-13

本文共 1703 字,大约阅读时间需要 5 分钟。

给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为:

 

dist(A[i][j],A[k][l])=|ik|+|jl|dist(A[i][j],A[k][l])=|i−k|+|j−l|

 

输出一个N行M列的整数矩阵B,其中:

 

B[i][j]=min1xN,1yM,A[x][y]=1dist(A[i][j],A[x][y])B[i][j]=min1≤x≤N,1≤y≤M,A[x][y]=1⁡dist(A[i][j],A[x][y])

 

输入格式

第一行两个整数n,m。

接下来一个N行M列的01矩阵,数字之间没有空格。

输出格式

一个N行M列的矩阵B,相邻两个整数之间用一个空格隔开。

数据范围

1N,M10001≤N,M≤1000

输入样例:

3 4000100110110

输出样例:

3 2 1 02 1 0 01 0 0 1

 

算法:bfs

题意:就是给你一个矩阵,然后矩阵里面有很多初始点,你需要求这些初始点到矩阵其他位置的最小距离。

 

#include 
#include
#include
using namespace std;const int maxn = 1e3+7;int n, m;int Map[maxn][maxn];int step[maxn][maxn];int dir[4][2] = {
0, -1, 0, 1, -1, 0, 1, 0};bool check(pair
next) { if(next.first <= 0 || next.first > n || next.second <= 0 || next.second > m) { return false; } if(step[next.first][next.second] != -1) { return false; } return true;}void bfs() { queue
> q; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { if(Map[i][j] == 1) { q.push(make_pair(i, j)); step[i][j] = 0; } else { step[i][j] = -1; } } } while(!q.empty()) { pair
now = q.front(); q.pop(); for(int i = 0; i < 4; i++) { pair
next; next.first = now.first + dir[i][0]; next.second = now.second + dir[i][1]; if(check(next)) { step[next.first][next.second] = step[now.first][now.second] + 1; q.push(next); } } }}int main() { scanf("%d %d", &n, &m); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { scanf("%1d", &Map[i][j]); } } bfs(); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { printf("%d%c", step[i][j], " \n"[j == m]); } } return 0; }

 

转载于:https://www.cnblogs.com/buhuiflydepig/p/11356968.html

你可能感兴趣的文章
windows phone开发-windows azure mobile service使用入门
查看>>
gis 参照资料
查看>>
枚举、结构体 应用
查看>>
CSS 设置table下tbody滚动条
查看>>
linux入门
查看>>
LINUX部署SVN服务器
查看>>
Hdu1015&&寒假作业第二组I题
查看>>
51 Nod 1262 扔球
查看>>
Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) C. Bear and Drawing
查看>>
模拟ATM机系统
查看>>
error:no such partition.grub rescue>问题
查看>>
3、Scott用户表的结构分析
查看>>
Java第一次上机课
查看>>
Spring源码解析之常见注解
查看>>
go语言基础之切片的创建和截取
查看>>
UNIX网络编程——原始套接字(dos攻击)
查看>>
Red Hat 7.0 DNS服务配置笔记
查看>>
Spring Boot微服务如何集成fescar解决分布式事务问题?
查看>>
LongListSelector 锁定组头(sticky header )之我的实现
查看>>
利用Node.js轻松创建web服务器
查看>>