zoukankan      html  css  js  c++  java
  • [恢]hdu 1242

    2011-12-25 09:54:46

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1242

    题意:angel被困在迷宫里,他的朋友们去救。n*m的迷宫,'.'代表路,'#'代表墙,'x'代表守卫,'r'代表朋友,'a'代表ANGEL。求最少时间。

    mark:BFS。注意有多个“朋友”,所以从a开始搜。

    代码:

    # include <stdio.h>
    # include <string.h>


    int n, m, sx, sy ;
    char graph[210][210] ;
    int dp[210][210] ;
    int q[40010] ;


    int bfs()
    {
    int front = 0, rear = 0 ;
    int i, x, y, xx, yy, next ;
    int tab[4][2] = {0, 1, 0, -1, 1, 0, -1, 0} ;
    memset (dp, -1, sizeof(dp)) ;
    dp[sx][sy] = 0 ;
    q[rear++] = sx*m+sy ;
    while (front != rear)
    {
    x = q[front] / m ;
    y = q[front++] % m ;
    if (graph[x][y] == 'r') return dp[x][y] ;
    for (i = 0 ; i < 4 ; i++)
    {
    xx = x + tab[i][0] ;
    yy = y + tab[i][1] ;
    if (xx < 0 || xx >= n || yy < 0 || yy >= m)
    continue ;
    if (graph[xx][yy] == '#') continue ;
    if (graph[xx][yy] == 'x') next = 2 ;
    else next =1 ;
    next += dp[x][y] ;
    if (dp[xx][yy]!= -1 &&dp[xx][yy]<=next) continue ;
    dp[xx][yy] = next ;
    q[rear++] = xx * m + yy ;
    }
    }
    return -1 ;
    }


    int min(int a, int b){return a<b?a:b;}


    int main ()
    {
    int i, j, ans ;
    while (~scanf ("%d %d%*c", &n, &m))
    {
    for (i = 0 ; i < n ; i++)
    scanf ("%s%*c", graph[i]) ;
    for (i = 0 ; i < n ; i++)
    for (j = 0 ; j < m ; j++)
    {
    if (graph[i][j] == 'a')
    sx = i, sy = j ;
    }
    ans = bfs () ;
    if (ans == -1)
    puts ("Poor ANGEL has to stay in the prison all his life.") ;
    else printf ("%d\n", ans) ;
    }
    return 0 ;
    }



  • 相关阅读:
    ArrayList.sort & Collections.sort
    preliminary->advanced exam coding part
    Spring JDBC的使用
    Spring之面向切面编程(AOP)
    Spring静态代理与动态代理
    Spring之JDBC的连接与注解的使用
    Spring入门之Bean的实例化方式
    Mybatis入门(二)
    Mybatis入门(一)
    正则表达式——转载
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2315344.html
Copyright © 2011-2022 走看看