BFS 广搜

Posted 让自己不再小小的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n", ans*11);
    }
}

 

以上是关于BFS 广搜的主要内容,如果未能解决你的问题,请参考以下文章

BFS 广搜

BFS广搜例题,问题引入 --- 阿狗荒岛逃生系列(其一)

bfs广搜

广搜 BFS()

Catch That Cow (BFS广搜)

广搜:codevs-3344(初步bfs)