旅游规划

来源:互联网 发布:如何代理网络飞机票 编辑:程序博客网 时间:2024/04/27 21:30

旅游规划

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std; #define INF 0xfffffffint vis[1010];//标记数组 int n,m,s,d; struct node{    int l,c;}pri[1010][1010],discost[1010];void dijkstra(int s){    memset(vis,0,sizeof(vis));    vis[s]=1;    for(int i=0;i<n;i++)    {        discost[i].l=pri[s][i].l;        discost[i].c=pri[s][i].c;    }    for(int i=0;i<n;i++)    {        int Ml=INF,Mc=INF,k=-1;        for(int j=0;j<n;j++)        {            if(!vis[j]&&discost[j].l<=Ml)            {                 if((discost[j].l==Ml&&discost[j].c<Mc)||discost[j].l<Ml)                {                    Ml=discost[j].l;                    Mc=discost[j].c;                    k=j;                }            }        }        if(k==-1)            return;        vis[k]=1;        for(int j=0;j<n;j++)            if(!vis[j]&&discost[j].l>=discost[k].l+pri[k][j].l)            {                if( (discost[j].l>discost[k].l+pri[k][j].l) || (discost[j].l==discost[k].l+pri[k][j].l && discost[j].c>discost[k].c+pri[k][j].c))                {                    discost[j].l=discost[k].l+pri[k][j].l;                    discost[j].c=discost[k].c+pri[k][j].c;                }            }    }} int main() {    scanf("%d%d%d%d",&n,&m,&s,&d);    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)        {            pri[i][j].l=i==j?0:INF;            pri[i][j].c=i==j?0:INF;        }    for(int i=1;i<=m;i++)    {        int a,b,l,c;        scanf("%d%d%d%d",&a,&b,&l,&c);        if(pri[a][b].l>l)        {            pri[a][b].l=pri[b][a].l=l;            pri[a][b].c=pri[b][a].c=c;        }    }    dijkstra(s);    printf("%d %d\n",discost[d].l,discost[d].c);    return 0; }
原创粉丝点击