ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HihoCoder1478 - 水陆距离 - 简单BFS

2020-09-25 08:33:06  阅读:230  来源: 互联网

标签:HihoCoder1478 int BFS front && 水陆 include define


题意

中文题。

思路

本来直接先把水域存起来,之后再for遍历,遇到陆地就用这个陆地去搜所有的水域,然后,TLE。

正确的做法是 BFS ,我想到了但是我没写出来。我又以为是记忆化搜索。

补充

这里我用到pair,

放上我之前写的pair的用法:https://www.cnblogs.com/OFSHK/p/11788576.html

AC代码

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<list>
#include<stdlib.h>
#include<map>
#include<vector>
#include<stack>
#include<string.h>
#include<stdio.h>
#include<queue>
using namespace std;
typedef long long ll;
#define sc(T) scanf("%d",&T)
#define scc(x,y) scanf("%d %d",&x,&y)
#define pr(T) printf("%d\n",T)
#define f(a,b,c) for (int a=b;a<c;a++)
#define ff(a,b,c) for (int a=b;a>c;a--)
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define eps 1e-9
#define PI acos(-1)

const int N=805;
char a[N][N];
int n,m,ans[N][N],book[N][N];
int to[4][2]= {{0,-1},{0,1},{-1,0},{1,0}};
//struct node
//{
//    int x,y;
//} w[160020];

queue<pair<int,int> >Q;

void bfs()
{
    while(!Q.empty())
    {
        int x=Q.front().first,y=Q.front().second;
        Q.pop();
        for(int i=0; i<4; i++)
        {
            int tx=x+to[i][0],ty=y+to[i][1];
            if(tx>=1&&tx<=n&&ty>=0&&ty<=m&&book[tx][ty]==-1)
                book[tx][ty]=book[x][y]+1,Q.push({tx,ty});
        }
    }
}

int main()
{
    scc(n,m);
    int p=0;
    for(int i=1; i<=n; i++)
    {
        scanf("%s",a[i]+1);
//        for(int j=1; j<=m; j++)
//        {
//            if(a[i][j]=='0') //水域
//                w[p].x=i,w[p++].y=j;
//        }
    }
    mem(book,-1);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(a[i][j]=='0')
                book[i][j]=0,Q.push({i,j});
        }
    }
    bfs();
//    for(int i=1; i<=n; i++)
//    {
//        for(int j=1; j<=m; j++)
//        {
//            if(j==m)
//                pr(ans[i][j]);
//            else
//                printf("%d ",ans[i][j]);
//        }
//    }
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            printf("%d%c",book[i][j],j==m?'\n':' ');
    }
    return 0;
}

标签:HihoCoder1478,int,BFS,front,&&,水陆,include,define
来源: https://www.cnblogs.com/OFSHK/p/13728034.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有