zoukankan      html  css  js  c++  java
  • 穿越泥地(mud)

    穿越泥地(mud)

    题目描述

    清早6:00,FJ就离开了他的屋子,开始了他的例行工作:为贝茜挤奶。前一天晚上,整个农场刚经受过一场瓢泼大雨的洗礼,于是不难想象,FJ现在面对的 是一大片泥泞的土地。FJ的屋子在平面坐标(0,0)的位置j贝茜所在的牛棚则位于坐标(x,y) (-500≤x≤500; -500≤Y≤500)处。当然,FJ也看到了地上的所有N(1≤N≤10000)个泥塘,第i个泥塘的坐标为(A_i,B_i) (-500≤A_i≤500:-500≤B_i≤500)。每个泥塘都只占据了它所在的那个格子。
    FJ自然不愿意弄脏他新买的靴子,但他同时想尽快到达贝茜所在的位置。为了数那些讨厌的泥塘,他已经耽搁了一些时间了。如果FJ只能平行于坐标轴移动,并 且只在x、y均为整数的坐标处转弯,童那么他从屋子门口出发,最少要走多少路才能到贝茜所在的牛棚呢?你可以认为从FJ的屋子到牛棚总是存在至少一条不经 过任何泥塘的路径。

    输入

    第1行:3个用空格隔开的整数:X,Y和N:
    第2~N+1行:第i+l行为2个用空格隔开的整数:A_i和B_i。

    输出

    输出1个整数,即FJ在不踏进泥塘的情况下,到达贝茜所在牛棚所需要走过的最小距离。

    样例输入

    1 2 7
    0 2
    -1 3
    3 1
    1 1
    4 2
    -1 1
    2 2
    

    样例输出

    11
    分析:bfs,注意处理坐标;
    代码:
    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<map>
    #include <queue>
    #define ll long long
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define inf 0x3f3f3f3f
    #define mp make_pair
    #define pii pair<int,int>
    const int maxn=1e3+10;
    using namespace std;
    int n,m,vis[maxn][maxn],x,y;
    const int dis[][2]={0,1,1,0,-1,0,0,-1};
    char a[maxn][maxn];
    void dfs()
    {
        queue<pii>p;
        vis[500][500]=1;p.push(mp(500,500));
        while(!p.empty())
        {
            pair<int,int> b=p.front();p.pop();
            for(int i=0;i<4;i++)
            {
                int l=b.first+dis[i][0],r=b.second+dis[i][1];
                if(l>=0&&l<1001&&r>=0&&r<1001&&!vis[l][r]&&a[l][r]!='1')
                {
                        vis[l][r]=vis[b.first][b.second]+1;
                        p.push(mp(l,r));
                        if(l==x+500&&r+500==y)return;
                }
            }
        }
    }
    int main()
    {
        int i,j,k,t;
        scanf("%d%d%d",&x,&y,&n);
        memset(a,'0',sizeof(a));
        while(n--)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            a[u+500][v+500]='1';
        }
        dfs();
        printf("%d
    ",vis[x+500][y+500]-1);
        //system("pause");
        return 0;
    }
  • 相关阅读:
    [转]MySQL之外键约束
    [转]mysql忘记密码,如何重置密码
    [转]MS Sql 7105错误
    [轉]免费的.NET混淆和反编译工具
    一個PDO操作類
    [转]基于FPGA的八位RISC CPU的设计
    SQL Server 2005中的分区表
    [轉]使用SQLDMO备份和恢复数据库(VB & ASP)
    [轉]VS 2010 通过 Architecture创建UML类图设计
    [转]用CSS调整scrollbar(滚动条)的配色
  • 原文地址:https://www.cnblogs.com/dyzll/p/5703407.html
Copyright © 2011-2022 走看看