zoukankan      html  css  js  c++  java
  • HDU

    题目链接

    http://acm.hdu.edu.cn/showproblem.php?pid=2612

    题意
    有两个人 要去一个城市中的KFC 一个城市中有多个KFC 求两个人到哪一个KFC的总时间最少 求出这个最少的总时间

    思路
    用BFS打一遍表 求出两个人每人到 每个 KFC 的时间 然后 遍历一下 更新答案

    AC代码

    #include <cstdio>
    #include <cstring>
    #include <ctype.h>
    #include <cstdlib>
    #include <cmath>
    #include <climits>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <map>
    #include <stack>
    #include <set>
    #include <numeric>
    #include <sstream>
    #include <iomanip>
    #include <limits>
    
    #define CLR(a) memset(a, 0, sizeof(a))
    #define pb push_back
    
    using namespace std;
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    typedef pair <int, int> pii;
    typedef pair <ll, ll> pll;
    typedef pair<string, int> psi;
    typedef pair<string, string> pss;
    
    const double PI = acos(-1);
    const double E = exp(1);
    const double eps = 1e-30;
    
    const int INF = 0x3f3f3f3f;
    const int maxn = 5e4 + 5;
    const int MOD = 1e9 + 7;
    
    int Move[][2]
    {
        -1, 0, // up
         1, 0, // down
         0,-1, // left
         0, 1, // right
    };
    
    struct Node
    {
        int x, y, step;
    }tmp;
    
    string G[205];
    
    int v[205][205];
    int dis[205][205][2];
    
    int n, m;
    
    int sx[2], sy[2];
    
    queue <Node> q;
    
    bool ok(int x, int y)
    {
        if (x < 0 || x >= n || y < 0 || y >= m || G[x][y] == '#' || v[x][y] == 1)
            return false;
        return true;
    }
    
    void bfs(int vis)
    {
        while (!q.empty())
        {
            int x = q.front().x;
            int y = q.front().y;
            int step = q.front().step;
            q.pop();
            if (G[x][y] == '@')
                dis[x][y][vis] = min(dis[x][y][vis], step);
            for (int i = 0; i < 4; i++)
            {
                tmp.x = x + Move[i][0];
                tmp.y = y + Move[i][1];
                tmp.step = step + 1;
                if (ok(tmp.x, tmp.y))
                {
                    q.push(tmp);
                    v[tmp.x][tmp.y] = 1;
                }
            }
        }
    }
    
    int main()
    {
        while (~scanf("%d%d", &n, &m))
        {
            for (int i = 0; i < n; i++)
            {
                cin >> G[i];
                for (int j = 0; j < m; j++)
                {
                    if (G[i][j] == 'Y')
                    {
                        sx[0] = i;
                        sy[0] = j;
                    }
                    else if (G[i][j] == 'M')
                    {
                        sx[1] = i;
                        sy[1] = j;
                    }
                }
            }
            memset(dis, 0x3f, sizeof(dis));
            for (int i = 0; i < 2; i++)
            {
                CLR(v);
                tmp.x = sx[i];
                tmp.y = sy[i];
                v[tmp.x][tmp.y] = 1;
                tmp.step = 0;
                while (!q.empty())
                    q.pop();
                q.push(tmp);
                bfs(i);
            }
            int ans = INF;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (G[i][j] == '@')
                        ans = min(ans, dis[i][j][0] + dis[i][j][1]);
                }
            }
            cout << ans * 11 << endl;
        }
    }
  • 相关阅读:
    React组件传值(子传父)
    React里面的componentDidMount()钩子函数用法
    修改主键的值
    mysql 命令
    Android ContentResolver
    linux下vim命令详解
    26种基于PHP的开源博客系统
    [环境配置] 如何为Apache绑定多IP多域名
    display属性值
    link标签 rel="stylesheet"
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433138.html
Copyright © 2011-2022 走看看