zoukankan      html  css  js  c++  java
  • hdu3790 最短路径问题 dijstra算法

    直接套用dijstra算法,记得更新花费。
    这题被坑了,同一条路居然有不同的距离和花费,所以赋值map的时候就要注意了,记得更新呀。。。
    #include<stdio.h>
    #include<string.h>
    #define INF 200000000
    int map[1001][1001],mapc[1001][1001],visit[1001],dist[1001],cost[1001],n;
    int dijstra(int s,int t)
    {
        int i,j,k,min,min1,v;
        memset(visit,0,sizeof(visit));
        for(i=1;i<=n;i++)
        {
            dist[i]=map[s][i];
            cost[i]=mapc[s][i];
        }
        dist[s]=0;
        cost[s]=0;
        visit[s]=1;
        for(i=1;i<=n;i++)
        {
            for(j=1,min=INF,v=s;j<=n;j++)
            {
                if(dist[j]<min&&visit[j]!=1)
                {
                    min=dist[j];
                    v=j;
                }
            }
            for(j=1;j<=n;j++)
            {
                if(dist[v]+map[v][j]<dist[j])
                {
                    dist[j]=dist[v]+map[v][j];
                    cost[j]=cost[v]+mapc[v][j];
                }
                else if(dist[v]+map[v][j]==dist[j])
                {
                    if(cost[v]+mapc[v][j]<cost[j])
                    {
                        cost[j]=cost[v]+mapc[v][j];
                    }
                }
            }
            visit[v]=1;
        }
        printf("%d %d
    ",dist[t],cost[t]);
    }
    int main()
    {
        int m,a,b,d,p,i,j,k,s,t;
        while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0))
        {
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    map[i][j]=INF;
                    mapc[i][j]=INF;
                }
            for(i=1;i<=m;i++)
            {
                scanf("%d%d%d%d",&a,&b,&d,&p);
                if(map[a][b]>d)
                {
                    map[a][b]=d;
                    map[b][a]=d;
                    mapc[a][b]=p;
                    mapc[b][a]=p;
                }
                else if(mapc[a][b]==d)
                {
                    if(mapc[a][b]>p)
                    {
                        mapc[a][b]=p;
                        mapc[b][a]=p;
                    }
                }
            }
            scanf("%d%d",&s,&t);
            dijstra(s,t);
        }
        return 0;
    }
     
  • 相关阅读:
    Nginx 安装与配置
    CentOS 7 下安装 MySQL 5.7
    使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
    Linux7 安装python3.5.4
    Java基础---Java 类
    Java基础---Java 练习题49
    Apache tomcat
    html 基础
    Java基础---Java 数组
    hibernate的查询方式的介绍(一)
  • 原文地址:https://www.cnblogs.com/qpddk/p/3264058.html
Copyright © 2011-2022 走看看