码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵距离

时间:2019-08-02 22:45:44      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:queue   main   code   second   out   fine   while   string   bfs   

题目链接

题意:就是求每个点到最近的1的距离,但距离是|xi-x|+|yi-y|。

思路:将每个是1的点BFS全图,想到了就是很水的BFS。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#define ll long long
using namespace std;
const int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
int n,m;
char a[1010][1010];
int b[1010][1010];
queue<pair<int,int> > q;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        scanf("%s",a[i]+1);
        memset(b,-1,sizeof(b));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        if(a[i][j]==1) q.push(make_pair(i,j)),b[i][j]=0;
    
    while(q.size())
    {    pair<int,int> now =q.front();
    
        q.pop();
        for(int i=0;i<4;i++)
    {    pair<int,int> next(now.first+dx[i],now.second+dy[i]);
        if(next.first<1||next.second<1||next.first>n||next.second>m)
        continue;
        if(b[next.first][next.second]==-1)
    {    b[next.first][next.second]=b[now.first][now.second]+1;
        q.push(next);} 
        
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            cout<<b[i][j]<<" ";
        cout<<endl;
    }
}

 

矩阵距离

标签:queue   main   code   second   out   fine   while   string   bfs   

原文地址:https://www.cnblogs.com/2462478392Lee/p/11291434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!