zoukankan      html  css  js  c++  java
  • [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
    ",dis[i][j]);
                }
                else{
                    printf("%d ",dis[i][j]);
                }
            }
        }
        
        return 0;
    }
    
    
  • 相关阅读:
    C++迭代器
    JdbcTemplateUtil 工具类分享
    PE和CDlinux二合一启动盘制作
    程序员自述——2019新年篇
    HTML/CSS常用单词
    JAVA学习常用单词
    Spring集成Mybatis3
    Spring集成struts2
    解决VS2010打开Web页面时经常由于内存较低而导致VS2010自动关闭的问题
    年终总结
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10715063.html
Copyright © 2011-2022 走看看