博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「CH2501」 矩阵距离 解题报告
阅读量:6413 次
发布时间:2019-06-23

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

描述

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

\(dist(A[i][j],A[k][l])=|i-k|+|j-l|\)

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

\(B[i][j]=min(1 \le x \le N,1 \le y \le M,A[x][y]=1)⁡{dist(A[i][j],A[x][y])}\)
即求与每个位置曼哈顿距离最近的1
\(N,M \le 1000\)

输入格式

第一行两个整数N,M。

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

输出格式

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

样例输入

3 4000100110110

样例输出

3 2 1 02 1 0 01 0 0 1

思路

有没有觉得,有点像洪水填充?

假设只有一个1,我们可以用广搜来实现。因为每次搜下一个位置,距离都会+1,所以队列里元素距起始点的距离是单调递增的。因此,当我们搜到一个没有被搜到的位置,直接记录最优答案即可。

但是这里有好几个1。不过这也无妨,我们把这几个1的ans初始值标记为0,把它们都push进队列,然后广搜即可。原理十分简单。

代码

#include
using namespace std;#define open(s) freopen( s".in", "r", stdin ), freopen( s".out", "w", stdout )#define MAXN 1005int N, M;bool a[MAXN][MAXN];int ans[MAXN][MAXN];queue
Qx, Qy;char t;int dir[4][2] = { 1, 0, 0, 1, -1, 0, 0, -1 };int main(){ memset( ans, -1, sizeof ans ); scanf( "%d%d", &N, &M ); for ( int i = 1; i <= N; ++i ) for ( int j = 1; j <= M; ++j ){ while( ( t = getchar() ) != '1' && t != '0' ); a[i][j] = t ^ '0'; if ( a[i][j] ) Qx.push(i), Qy.push(j), ans[i][j] = 0; } int x, y, tx, ty; while( !Qx.empty() ){ x = Qx.front(); y = Qy.front(); Qx.pop(); Qy.pop(); for ( int i = 0; i < 4; ++i ){ tx = x + dir[i][0]; ty = y + dir[i][1]; if ( tx > 0 && ty > 0 && tx <= N && ty <= M && ans[tx][ty] == -1 ){ ans[tx][ty] = ans[x][y] + 1; Qx.push(tx); Qy.push(ty); } } } for ( int i = 1; i <= N; ++i, putchar('\n') ) for ( int j = 1; j <= M; ++j ) printf( "%d ", ans[i][j] ); return 0;}

转载于:https://www.cnblogs.com/louhancheng/p/10100262.html

你可能感兴趣的文章
如何查看局域网内所有的IP
查看>>
谈2017年高考对编程人生的思索
查看>>
关于 Dubbo Failed to save registry store file, cause: Can not lock the registry cache file
查看>>
spring事务管理
查看>>
【腾讯开源】iOS爆内存问题解决方案-OOMDetector组件
查看>>
Linux TTY、PTS、PTY详解
查看>>
java泛型中T、E、K、V、?等含义
查看>>
UITableView中使用reloadRowsAtIndexPaths会出现闪退的解决办法
查看>>
Banner无限轮播图
查看>>
Java 静态代理、Java动态代理、CGLIB动态代理
查看>>
zabbix监控memcached模板
查看>>
JavaScript中的对象
查看>>
asp判断接受的参数是否为纯数字
查看>>
Lua中的table函数库
查看>>
阿斯顿发生点
查看>>
Android 图片倒影效果源码
查看>>
HADOOP2.0,Exception java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/v2/app/MRAppMaster
查看>>
Planning, Deploying, and Monitoring Mobility
查看>>
Win7 + VS2010 + Python2.7.5 安装 gevent
查看>>
pd 数据类型对照表
查看>>