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;
    }
    
    
  • 相关阅读:
    涉猎
    linq to sql中的自动缓存(对象跟踪)
    Java的起源和发展
    Java为什么需要保留基本数据类型
    JDK各版本新增的主要特性
    【转】整理:著名软件是使用什么语言写的?
    Struts2框架学习
    json格式
    sqlserver开窗函数改造样例
    说一下这次的求职经历。
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10715063.html
Copyright © 2011-2022 走看看