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);
        }
    }
  • 相关阅读:
    Qt中使用cout, cin, cerr
    linux下清理系统垃圾
    linux清理内存命令
    boost 特点
    linux boost 安装
    valgrind 的使用及错误信息分析
    ArcGIS Engine 编辑介绍
    ArcGIS Engine 编辑- IWorkspaceEdit
    ArcGIS Engine 编辑- ITask
    CreateFeature与CreateFeatureBuffer区别
  • 原文地址:https://www.cnblogs.com/9968jie/p/5537883.html
Copyright © 2011-2022 走看看