zoukankan      html  css  js  c++  java
  • BFS 广搜

    HDU 2612

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<queue>
    using namespace std;
    
    #define INF 0x3f3f3f3f
    #define N 210
    
    int n, m;
    char maps[N][N];
    int vis[N][N], dis[N][N][2], f;
    int dir[4][2]={{1,0}, {0,1}, {-1,0}, {0,-1}};
    
    struct node
    {
        int x, y, step;
    };
    
    queue <node> q;
    
    void BFS(int x, int y)
    {
        node head, next;
        head.x=x;
        head.y=y;
        head.step=0;
        vis[x][y]=1;
        q.push(head);
    
        while(!q.empty())
        {
            head=q.front();
            q.pop();
            for(int i=0; i<4; i++)
            {
                next.x=head.x+dir[i][0];
                next.y=head.y+dir[i][1];
                if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&!vis[next.x][next.y]
                   &&(maps[next.x][next.y]=='.'||maps[next.x][next.y]=='@'))
                {
                    vis[next.x][next.y]=1;
                    next.step=head.step+1;
                    if(maps[next.x][next.y]=='@')
                        dis[next.x][next.y][f]=min(dis[next.x][next.y][f], next.step);
                    q.push(next);
                }
            }
        }
    }
    
    int main()
    {
        while(~scanf("%d%d", &n, &m))
        {
            memset(dis, INF, sizeof(dis));
            for(int i=0; i<n; i++)
                scanf("%s", maps[i]);
    
            for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
            {
                if(maps[i][j]=='Y')
                {
                    f=0;
                    memset(vis, 0, sizeof(vis));
                    BFS(i, j);
                }
                else if(maps[i][j]=='M')
                {
                    f=1;
                    memset(vis, 0, sizeof(vis));
                    BFS(i, j);
                }
            }
    
            int ans=INF;
    
            for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
            {
                if(maps[i][j]=='@'&&ans>dis[i][j][0]+dis[i][j][1])
                    ans=dis[i][j][0]+dis[i][j][1];
            }
            printf("%d
    ", ans*11);
        }
    }
  • 相关阅读:
    [CF1475F] Unusual Matrix
    [JXOI2018] 游戏
    [ZJOI2010] 排列计数
    [CF1474E] What Is It?
    [CF375D] Tree and Queries
    [CF519E] A and B and Lecture Rooms
    [CF321C] Ciel the Commander
    [CF1C] Ancient Berland Circus
    [CF321A] Ciel and Robot
    [CF1450C1] Errich-Tac-Toe (Easy Version)
  • 原文地址:https://www.cnblogs.com/9968jie/p/5537883.html
Copyright © 2011-2022 走看看