zoukankan      html  css  js  c++  java
  • acwing 173. 矩阵距离(bfs)

    给定一个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 4
    0001
    0011
    0110
    

    输出样例:

    3 2 1 0
    2 1 0 0
    1 0 0 1
    题意理解:B[i]对应原A[i]中为0的点到最近的为1的点的曼哈顿距离。
    思路:bfs,将原来地图中为1的点全部先入队,然后展开广搜,碰到不为1的点就入队,并且标记它的最近曼哈顿距离为基点(从队列中取出来的点)的距离加1.因为刚开始将所有的地图上为1的点标记为1,所以最后输出时要减1.
    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> P;
    int vis[1005][1005];
    char g[1005][1005];
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    int n,m;
    queue<P>q;
    void bfs()
    {
        while(q.size())
        {
            P st=q.front();q.pop();
            for(int i=0;i<4;i++)
            {
                int x=st.first+dx[i],y=st.second+dy[i];
                if(x>=0&&x<n&&y>=0&&y<m&&!vis[x][y])
                {
                    vis[x][y]=vis[st.first][st.second]+1;
                    q.push({x,y});
                }
            }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
        {
            getchar();
            for(int j=0;j<m;j++)
            {
                scanf("%c",&g[i][j]);
                vis[i][j]=g[i][j]-'0';
                if(vis[i][j])
                q.push({i,j});
            }
        }
        bfs();
         for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                printf("%d ",vis[i][j]-1);
            }
            printf("\n");
        }
        return 0;
        
    }
  • 相关阅读:
    js记录
    快速最好响应式布局(CSS3)
    CSS3终极动画制作属性animation
    虚拟机中试用windows 8(视频)
    平板电脑上完美体验Windows 8 (视频)
    面对电磁泄漏您的电脑还安全吗?--计算机设备信息泄漏揭秘
    基于Linux平台Softimage XSI 演示
    为您的Office文档加把锁-ADRMS的安装
    VNC Server模拟攻击实战
    暴力破解FTP服务器技术探讨与防范措施
  • 原文地址:https://www.cnblogs.com/chuliyou/p/12691648.html
Copyright © 2011-2022 走看看