ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Security Guards (Gym - 101954B)( bfs + 打表 )

2019-08-15 23:01:25  阅读:314  来源: 互联网

标签:Guards dist int Gym curx cury bfs guard top


题意及思路

题目主要是讲先给出所有guard的位置,再给出所有incidents的位置,求出guard到达每个incident处最小的steps,其中guard每次可以向四周8个方向移动。
思路:对于每个guard使用bfs遍历它周围的点,算出相应的点到它的距离。

AC代码

#include<bits/stdc++.h>
using namespace std;
int N, Q;
struct Pla
{
    int x, y;
};
int dist[5000+10][5000+10];
int dx[] = {-1, -1, -1, 1, 1, 1, 0, 0};
int dy[] = {0, 1, -1, 0, 1, -1, 1, -1};
queue<Pla> q;
void bfs()
{
    while(!q.empty())
    {
        Pla top = q.front();
        q.pop();
        for(int i = 0; i < 8; i++)
        {
            int curx = top.x + dx[i], cury = top.y + dy[i];
            if(curx < 0 || curx > 5000 || cury < 0 || cury > 5000)      //先写这个会快些
                continue;
            if(dist[curx][cury] == -1)
            {
                Pla tmp = top;
                tmp.x = curx, tmp.y = cury;
                dist[curx][cury] = dist[top.x][top.y] + 1;
                q.push(tmp);
            }
        }
    }
}
int main()
{
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    scanf("%d%d", &N, &Q);
    memset(dist, -1, sizeof(dist));
    while(!q.empty())
        q.pop();
    for(int i = 0; i < N; i++)
    {
        Pla guard;
        scanf("%d%d", &guard.x, &guard.y);
        dist[guard.x][guard.y] = 0;         //guard位置处都置为0
        q.push(guard);              //将guard插入队列中,在后面进行bfs
    }
    bfs();
    for(int i = 0; i < Q; i++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        printf("%d\n", dist[a][b]);
    }
}

标签:Guards,dist,int,Gym,curx,cury,bfs,guard,top
来源: https://www.cnblogs.com/KeepZ/p/11361109.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有