• 多个目标点的最短路径


    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    char map[205][205];
    int count[205][205];
    int a[205][205],b[205][205];
    int m,n;
    const int w=1e7;
    int u[4][2]={1,0,-1,0,0,1,0,-1};
    struct node{
        int x,y;
        int step;
    };
    int bfs(int x,int y,int e[205][205])
    {
        memset(count,0,sizeof(count));
        queue<node>f;
        node now;
        now.x=x;
        now.y=y;
        now.step=0;
        f.push(now);
        count[x][y]=1;
        while(!f.empty())
        {
            now=f.front();
            f.pop();
            for(int i=0;i<4;i++)
            {
                int dx=now.x+u[i][0];
                int dy=now.y+u[i][1];
                if(count[dx][dy]==0&&dx>=1&&dx<=m&&y>=1&&y<=n&&map[dx][dy]!='#')
                {
                    node next;
                    next.x=dx;
                    next.y=dy;
                    count[next.x][next.y]=1;
                    e[dx][dy]=now.step+1;
                    next.step=now.step+1;
                    f.push(next);
                }
            }
        }
    }
    int main()
    {
        int s,k1,k2,h1,h2,d1,d2,min,k;
        while(cin>>m>>n)
        {
            min=w;
            for(int i=1;i<=m;i++)
            cin>>(map[i]+1);
            s=1;
            for(int i=1;i<=m;i++)
                for(int j=1;j<=n;j++)
                {
                        if(map[i][j]=='Y')
                           {
                               k1=i;h1=j;
                           }
                        else
                        if(map[i][j]=='M')
                        {
                            k2=i;h2=j;
                        }
                }
                memset(a,0,sizeof(a));
                memset(b,0,sizeof(b));
                d1=bfs(k1,h1,a);
                d2=bfs(k2,h2,b);
                for(int i=1;i<=m;i++)
                    for(int j=1;j<=n;j++)
                    {
                        if(map[i][j]=='@')
                        {
                            k=a[i][j]+b[i][j];
                            if(k<min)
                            min=k;
                        }
                    }
            cout<<min*11<<endl;
        }
    } 
  • 相关阅读:
    Hive的安装和使用
    Redis 慢查询日志
    GO语言-数组
    ZooKeeper-3.3.4集群安装配置
    GO语言-基础语法:循环
    GO语言-基础语法:条件判断
    GO语言-基础语法:变量定义
    nginx限制下载速度
    Centos7下Etcd集群搭建
    浅谈spj
  • 原文地址:https://www.cnblogs.com/Leozi/p/10835126.html
Copyright © 2020-2023  润新知