zoukankan      html  css  js  c++  java
  • BZOJ 1627: [Usaco2007 Dec]穿越泥地( BFS )

    BFS... 

    ---------------------------------------------------------------------------------------

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    #include<iostream>
     
    #define rep( i , n ) for( int i = 0 ; i < n ; i++ )
    #define clr( x , c ) memset( x , c , sizeof( x ) )
     
    using namespace std;
     
    const int dir[ 4 ][ 2 ] = { { -1 , 0 } , { 1 , 0 } , { 0 , 1 } , { 0 , -1 } };
    const int inf = 0x3f3f3f3f;
    const int maxn = 10000 + 5;
    const int maxm = 1000 + 5;
     
    bool G[ maxm ][ maxm ];
     
    int d[ maxm ][ maxm ];
     
    struct Node {
    int x , y , d;
    };
     
    queue< Node > Q;
     
    int main() {
    freopen( "test.in" , "r" , stdin );
    clr( d , inf );
    int n;
    int goal[ 2 ];
    cin >> goal[ 0 ] >> goal[ 1 ] >> n;
    goal[ 0 ] += 500 , goal[ 1 ] += 500;
    clr( G , -1 );
    while( n-- ) {
    int x , y;
    scanf( "%d%d" , &x , &y );
    G[ x + 500 ][ y + 500 ] = false;
    }
    Q.push( ( Node ) { 500 , 500 , d[ 500 ][ 500 ] = 0 } );
    while( ! Q.empty() ) {
    Node o = Q.front();
    Q.pop();
    int coor[ 2 ] = { o.x , o.y } , dist = o.d;
    if( ! memcmp( coor , goal , sizeof( coor ) ) )
       break;
    dist++;
    rep( i , 4 ) {
    rep( j , 2 ) coor[ j ] += dir[ i ][ j ];
    if( G[ coor[ 0 ] ][ coor[ 1 ] ] && dist < d[ coor[ 0 ] ][ coor[ 1 ] ] )
    Q.push( ( Node ) { coor[ 0 ] , coor[ 1 ] , d[ coor[ 0 ] ][ coor[ 1 ] ] = dist } );
    rep( j , 2 ) coor[ j ] -= dir[ i ][ j ];
    }
    }
    cout << d[ goal[ 0 ] ][ goal[ 1 ] ] << " ";
    return 0;
    }

      

    ---------------------------------------------------------------------------------------

    1627: [Usaco2007 Dec]穿越泥地

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 522  Solved: 342
    [Submit][Status][Discuss]

    Description

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

    Input

    * 第1行: 3个用空格隔开的整数:X,Y 和 N

    * 第2..N+1行: 第i+1行为2个用空格隔开的整数:A_i 和 B_i

    Output

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

    Sample Input

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

    输入说明:

    贝茜所在牛棚的坐标为(1, 2)。Farmer John能看到7个泥塘,它们的坐标分
    别为(0, 2)、(-1, 3)、(3, 1)、(1, 1)、(4, 2)、(-1, 1)以及(2, 2)。
    以下为农场的简图:(*为FJ的屋子,B为贝茜呆的牛棚)

    4 . . . . . . . .
    3 . M . . . . . .
    Y 2 . . M B M . M .
    1 . M . M . M . .
    0 . . * . . . . .
    -1 . . . . . . . .
    -2-1 0 1 2 3 4 5

    X

    Sample Output

    11

    HINT

        约翰的最佳路线是:(0,0),(一1,0),(一2,0),(一2,1),(一2,2),(一2,3),(一2,4),(一1,4),(0,4),  (0,3),  (1,3),  (1,2).

    Source

  • 相关阅读:
    严重: Parse error in application web.xml file at jndi:/localhost/ipws/WEBINF/web.xml java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml
    Failed to install .apk on device 'emulator5554': timeout解决方法
    java.lang.NoClassDefFoundError:org.jsoup.Jsoup
    Conversion to Dalvik format failed: Unable to execute dex:解决方法
    apache Digest: generating secret for digest authentication ...
    Description Resource Path Location Type Project has no default.properties file! Edit the project properties to set one.
    android service随机自启动
    MVC3 安装部署
    EF 4.3 CodeBased 数据迁移演练
    SQL Server 2008开启sa账户
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4561490.html
Copyright © 2011-2022 走看看