zoukankan      html  css  js  c++  java
  • 喵哈哈村的麦克雷

    为了拯救喵哈哈村,这个世界必须要存在英雄。

    一名叫做麦克雷的英雄站了出来!他现在面临一个难题:

    给定一个N x M的01矩阵,其中1表示陆地,0表示水域。对于每一个位置,求出它距离最近的水域的距离是多少。  

    矩阵中每个位置与它上下左右相邻的格子距离为1。

    本题包含若干组测试数据:
    第一行包含两个整数,N和M。
    以下N行每行M个0或者1,代表地图。
    数据保证至少有1块水域。
    满足,1 <= N, M <= 100

    输出N行,每行M个空格分隔的整数。每个整数表示该位置距离最近的水域的距离。
    每行的末尾都请加一个空格……


    4 4  
    0110  
    1111  
    1111  
    0110
    0 1 1 0  
    1 2 2 1  
    1 2 2 1  
    0 1 1 0
    题解

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    string s[805];
    int mp[805][805];
    int dx[4]{1,-1,0,0};
    int dy[4]{0,0,1,-1};
    main()
    {
    while(cin>>n>>m)
    {
    memset(mp,-1,sizeof(mp));
    for(int i=0;i<n;i++)
    cin>>s[i];
    queue<int> QX,QY;
    for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
    {
    if(s[i][j]=='0')
    {
    mp[i][j]=0;
    QX.push(i);
    QY.push(j);
    }
    }

    while(!QX.empty()){
    int nx = QX.front();
    int ny = QY.front();
    QX.pop();
    QY.pop();
    for(int i=0;i<4;i++){
    int nex=nx+dx[i];
    int ney=ny+dy[i];
    if(nex<0||nex>=n)continue;
    if(ney<0||ney>=m)continue;
    if(mp[nex][ney]!=-1)continue;
    mp[nex][ney]=mp[nx][ny]+1;
    QX.push(nex);
    QY.push(ney);
    }
    }
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<m;j++)
    cout<<mp[i][j]<<" ";
    cout<<endl;
    }
    }
    }

     
  • 相关阅读:
    Python学习4
    Python学习3
    Python学习2
    表空间
    sqlplus常用设置
    HashMap和LinkedHashMap
    堆栈源码
    观察者模式
    策略模式
    java线性表
  • 原文地址:https://www.cnblogs.com/gfdybz/p/6555151.html
Copyright © 2011-2022 走看看