首页 > 其他 > 详细

紧急救援 L2-001

时间:2019-02-13 12:48:16      阅读:172      评论:0      收藏:0      [点我收藏+]

较为复杂的dijkstra 

包含路径打印  最小路的条数  最小路径的情况下取最大权值

v0要是标记就会出错。。。?

有权值的题目  不能设置mp[i][i]为0  否则会无限加权

这题很有参考价值 可以当模板

#include<bits/stdc++.h>
using namespace std;
#define N 510
#define INF 0x3f3f3f3f
int n,e,s;
int vis[N];
int dis[N];
int peo[N];
int mp[N][N];
int path[N];
int num[N];
int helpmen[N];


void dijkstra(int )
{
    memset(vis,0,sizeof(vis));
    memset(path,0,sizeof(path));
    memset(helpmen,0,sizeof(helpmen));
    memset(num,0,sizeof(num));
    for(int i=0;i<n;i++)
    dis[i]=mp[s][i];

    dis[s]=0;
   // vis[s]=1;
    path[s]=-1;
    helpmen[s]=peo[s];
    num[s]=1;
    for(int i=0;i<n;i++)
    {
        int minn=INF,u=-1;
        for(int j=0;j<n;j++)
        {
            if(!vis[j]&&dis[j]<minn)
            {
                minn=dis[j];
                u=j;
            }
        }
        if(u==-1)return ;
        vis[u]=1;
        for(int j=0;j<n;j++)
        {
            if(dis[j]>dis[u]+mp[u][j])
            {
                dis[j]=dis[u]+mp[u][j];
                path[j]=u;
                helpmen[j]=peo[j]+helpmen[u];
                num[j]=num[u];
            }
            else if(dis[j]==dis[u]+mp[u][j])
            {
                num[j]+= num[u];
                if( helpmen[j]<helpmen[u]+peo[j] )
                {
                    helpmen[j]=helpmen[u]+peo[j];
                    path[j]=u;
                }
           }
        }
    }
}
void print(int x)
{
    if(path[x]==-1)
    {
        printf("%d",x);return ;
    }
    print(path[x]);
    printf(" %d",x);
    return ;
}

int main()
{
    int q,s;
    scanf("%d%d%d%d",&n,&q,&s,&e);
    for(int i=0;i<n;i++)scanf("%d",&peo[i]);
    memset(mp,INF,sizeof(mp));
   // for(int i=0;i<n;i++)mp[i][i]=0;//如果加上这句话 就可在一个城市不断刷救援人员
    while(q--)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        mp[a][b]=mp[b][a]=c;
    }
    dijkstra(s);
    printf("%d %d\n",num[e],helpmen[e]);
    print(e);
    return 0;
}

 

紧急救援 L2-001

原文:https://www.cnblogs.com/bxd123/p/10369166.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!