zoukankan      html  css  js  c++  java
  • BFS(最短路) HDU 2612 Find a way

    题目传送门

      1 /*
      2     BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值
      3 */
      4 /************************************************
      5 Author        :Running_Time
      6 Created Time  :2015-8-4 19:36:36
      7 File Name     :HDOJ_2612.cpp
      8 ************************************************/
      9 
     10 #include <cstdio>
     11 #include <algorithm>
     12 #include <iostream>
     13 #include <sstream>
     14 #include <cstring>
     15 #include <cmath>
     16 #include <string>
     17 #include <vector>
     18 #include <queue>
     19 #include <deque>
     20 #include <stack>
     21 #include <list>
     22 #include <map>
     23 #include <set>
     24 #include <bitset>
     25 #include <cstdlib>
     26 #include <ctime>
     27 using namespace std;
     28 
     29 #define lson l, mid, rt << 1
     30 #define rson mid + 1, r, rt << 1 | 1
     31 typedef long long ll;
     32 const int MAXN = 2e2 + 10;
     33 const int INF = 0x3f3f3f3f;
     34 const int MOD = 1e9 + 7;
     35 char maze[MAXN][MAXN];
     36 bool vis[MAXN][MAXN];
     37 int step[MAXN][MAXN];
     38 int step2[MAXN][MAXN];
     39 int dx[4] = {-1, 1, 0, 0};
     40 int dy[4] = {0, 0, -1, 1};
     41 int n, m;
     42 int sx, sy, ex, ey;
     43 
     44 bool judge_y(int x, int y)  {
     45     if (x < 1 || x > n || y < 1 || y > m || maze[x][y] == '#' || vis[x][y]) return false;
     46     return true;
     47 }
     48 
     49 bool judge_m(int x, int y)  {
     50     if (x < 1 || x > n || y < 1 || y > m || maze[x][y] == '#' || vis[x][y])  return false;
     51     return true;
     52 }
     53 
     54 void BFS_Y(void)    {
     55     memset (step, 0, sizeof (step));
     56     memset (vis, false, sizeof (vis));
     57     queue<pair<int, int> > Q;   Q.push (make_pair (sx, sy));
     58     vis[sx][sy] = true; step[sx][sy] = 0;
     59     while (!Q.empty ()) {
     60         int x = Q.front ().first, y = Q.front ().second;    Q.pop ();
     61         for (int i=0; i<4; ++i) {
     62             int tx = x + dx[i], ty = y + dy[i];
     63             if (!judge_y (tx, ty))   continue;
     64             Q.push (make_pair (tx, ty));    vis[tx][ty] = true;
     65             step[tx][ty] = step[x][y] + 1;
     66         }
     67     }
     68 }
     69 
     70 void BFS_M(void)    {
     71     memset (vis, false, sizeof (vis));
     72     memset (step2, 0, sizeof (step2));
     73     queue<pair<int, int> > Q;   Q.push (make_pair (ex, ey));
     74     vis[ex][ey] = true; step2[ex][ey] = 0;
     75     while (!Q.empty ()) {
     76         int x = Q.front ().first, y = Q.front ().second;    Q.pop ();
     77         for (int i=0; i<4; ++i) {
     78             int tx = x + dx[i], ty = y + dy[i];
     79             if (!judge_m (tx, ty))  continue;
     80             step2[tx][ty] = step2[x][y] + 1;
     81             Q.push (make_pair (tx, ty));    vis[tx][ty] = true;
     82         }
     83     }
     84 }
     85 
     86 int main(void)    {     //HDU 2612 Find a way
     87     while (scanf ("%d%d", &n, &m) == 2) {
     88         for (int i=1; i<=n; ++i)    {
     89             scanf ("%s", maze[i] + 1);
     90             for (int j=1; j<=m; ++j)    {
     91                 if (maze[i][j] == 'Y')  sx = i, sy = j;
     92                 if (maze[i][j] == 'M')  ex = i, ey = j;
     93             }
     94         }
     95         BFS_Y ();   BFS_M ();
     96         int ans = INF;
     97         for (int i=1; i<=n; ++i)    {
     98             for (int j=1; j<=m; ++j)    {
     99                 if (maze[i][j] == '@' && vis[i][j])  {
    100                     ans = min (ans, step[i][j] + step2[i][j]);
    101                 }
    102             }
    103         }
    104         if (ans == INF) puts ("-1");
    105         else    printf ("%d
    ", ans * 11);
    106     }
    107 
    108     return 0;
    109 }
    编译人生,运行世界!
  • 相关阅读:
    UnrealEngine4之UObject(一)
    【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
    谈论java中怎样处理高并发的问题
    LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
    Android ScrollView中嵌套ListView
    桌面云
    galera mysql cluster
    CSS3绘制灰太狼动画,绝对精彩
    加权重随机算法
    学习是为了找工作?
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4703173.html
Copyright © 2011-2022 走看看