zoukankan      html  css  js  c++  java
  • Mud Puddles ( bfs )

    传送门

    题目

    题解

    直接bfs就行,有个坑点要注意:因为坐标存在负数,所以可以把所有点都+500转化为正数去做。

    Code

    #include<bits/stdc++.h>
    #define debug1(x) cout<<#x<<"="<<x<<endl
    #define debug2(x,y) cout<<#x<<"="<<x<<' '<<#y<<"="<<y<<endl
    using namespace std;
    const int maxn=1e4+10;
    typedef long long ll;
    int x,y,N,a[maxn],b[maxn];
    bool book[1005][1005];
    struct node
    {
        int x,y,mindis;
    }que[1000008];
    int bfs(int qx,int qy,int zx,int zy)//qx,qy为起点坐标,zx,zy为终点坐标
    {
        int next[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
        int head=1,tail=1,tx,ty,qq=0;
        que[tail].x=qx,que[tail].y=qy,que[tail++].mindis=0;
        book[qx][qy]=1;
        while(head<tail){
            for(int i=0;i<4;i++){
                tx=que[head].x+next[i][1];
                ty=que[head].y+next[i][0];
                if(tx<0||ty<0||tx>1000||ty>1000)continue;
                if(!book[tx][ty]){
                    book[tx][ty]=1;
                    que[tail].x=tx,que[tail].y=ty;
                    que[tail].mindis=que[head].mindis+1;
                    tail++;
                }
                if(tx==zx&&ty==zy){
                    qq=1;
                    break;
                }
            }
            if(qq)break;
            head++;
        }
        return que[tail-1].mindis;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>x>>y>>N;
        x+=500,y+=500;
        for(int i=1;i<=N;++i){
            cin>>a[i]>>b[i];
            book[a[i]+500][b[i]+500]=1;
        }
        int ans=bfs(500,500,x,y);
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    hadoop机架感知
    Ajax请求结果的缓存
    Blocks语法
    CentOS yum 源的配置与使用
    .NET三层架构开发初步
    Mac技巧合集第一期
    Fine Uploader文件上传组件
    WCF 系列文章
    http权威指南读书笔记
    WCF Service Hosting的线程关联性Mono实现比.NET统一?
  • 原文地址:https://www.cnblogs.com/HOLLAY/p/11470395.html
Copyright © 2011-2022 走看看