美文网首页算法刷题
AcWing 173. 矩阵距离

AcWing 173. 矩阵距离

作者: 良木lins | 来源:发表于2020-04-08 20:47 被阅读0次

广度优先搜索 + 多源最短路径

原题链接

感悟:这个题啊,其实可以转换个思路,转换成1的格子到其他0的格子的最短路径,就基本知道是多源最短路径的问题。说到多源最短路径有个大名鼎鼎的Floyd算法,不过本题不用这么麻烦,因为读懂题目可知边的权值都是1(相邻边)。可以直接用广搜,等下详细说。还有啊,今天终于报上了心心念念的老师的算法基础课,很激动,尽管自己水平不咋地,还是得加油啊!!!

广搜的基本框架可以看看这篇 广搜框架

本题思路

从1格子开始,往其他地方搜索,走一步距离加一(挺简单的,没啥好说)

  • 利用广搜求多源最短路径
  • 储存地图g,状态d,都用二维数组
  • 开始状态:1格子的地方距离都是0;最终状态:其他地方走到,并记录距离;
  • 二维的四个方向
  • 每走一步距离+1

pair

pair<int, int> p; //第一个坐标p.first,第二个坐表p.second;

ACcode

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;

const int N = 1005;
typedef pair<int, int> pp;

int n, m;
char g[N][N];
int d[N][N];

int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

void bfs()
{
    memset(d, -1, sizeof d);
    queue<pp> q;
    
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            if(g[i][j] == '1')
            {   
                d[i][j] = 0;
                q.push({i, j}); //加入的时候应该将x,y坐标作为一个整体加入
            }
    
    while(q.size())
    {
        auto t = q.front(); q.pop();
        
        int x = t.first, y = t.second;
        for(int i = 0; i < 4; i++)
        {
            int nx = x + dx[i], ny = y + dy[i];
            if(nx >= 0 && nx < n && ny >= 0 && ny < m && d[nx][ny] == -1)
            {
                d[nx][ny] = d[x][y] + 1;
                q.push({nx, ny});
            }
        }
    }
    
}

int main()
{
    cin >> n >> m;
    
    for(int i = 0; i < n; i++) 
        scanf("%s", g[i]);
        
    bfs();
    
    for(int i = 0; i < n; i++)
    {   
        for(int j = 0; j < m; j++)
            printf("%d ", d[i][j]);
        printf("\n");
    }
    
    return 0;
}

相关文章

  • AcWing 173. 矩阵距离

    广度优先搜索 + 多源最短路径 原题链接 感悟:这个题啊,其实可以转换个思路,转换成1的格子到其他0的格子的最短路...

  • 01背包问题(DP求解)

    acwing例题链接[https://www.acwing.com/problem/content/2/]

  • R语言~绘制排序图

    加载工具包 定义简单函数以合并距离矩阵 加载数据 计算距离矩阵 绘图距离衰减曲线 非度量多维尺度分析 NMDS 方...

  • (树状数组) AcWing 241. 楼兰图腾

    AcWing 241. 楼兰图腾[https://www.acwing.com/activity/content/...

  • 第三章 搜索与图论

    AcWing 842. 排列数字[https://www.acwing.com/activity/content/...

  • 树的重心(DFS解法)

    acwing题目链接[https://www.acwing.com/problem/content/848/] 题...

  • IBS距离矩阵

    IBS是指两个个体中共有的等位基因序列相同,IBS的遗传距离可以衡量样本间的相似性,评价其亲缘关系。

  • 矩阵变换

    摘自:旋转变换(一)旋转矩阵 平移矩阵 tx表示:在x轴方向上平移距离ty表示:在y轴方向上的平移距离 旋转矩阵 ...

  • 2018-09-18 542. 01 Matrix

    题意:给你一个矩阵只包含元素0和1,求的一个矩阵,该矩阵在原矩阵为1的位置得出该元素距离最近的0的距离(仅能上下左...

  • AcWing 1402. 星空之夜 (flood fill+图哈

    AcWing 1402. 星空之夜 [https://www.acwing.com/activity/cont...

网友评论

    本文标题:AcWing 173. 矩阵距离

    本文链接:https://www.haomeiwen.com/subject/pdpxmhtx.html