zoukankan      html  css  js  c++  java
  • 单源最短路径(贪心算法)

    最近在研究算法设计与分析,看到了单源最短路劲,特发文一篇。

       

    下面代码就是实现这个有向联通图

    废话不说直接上代码

    #include<stdio.h>
    #define m 5000
    int c[5][5]=
    {
         m,10,m,30,100,
         m,m,50,m,m,
         m,m,m,m,10,
         m,m,20,m,60,
         m,m,m,m,m,
    };
    int dist[5] ;
    void Dijkstra(int dist[])
    {
        int prev[5];
        int n=4;
        int v=0;
        int s[5],i,j,temp,u,newdist;
        for(i=0;i<=n;i++)
        {
            dist[i]=c[v][i];
            s[i]=0;
            if(dist[i]==m)prev[i]=0;
            else prev[i]=v;
        }
        dist[v]=0;
        s[v]=1;
        //for(i=0;i<5;i++){printf("%d ",dist[i]);}
        //printf("\n");
        for(i=0;i<=n;i++)
        {
            temp=m;
            u=v;
            for(j=1;j<=n;j++)
                if((!s[j])&&(dist[j]<temp)){u=j;temp=dist[j];}//找出一个与源点相连的最小的点
                //printf("%d ",u);
                s[u]=1;
    
                for(j=1;j<=n;j++)
                    if((!s[j])&&(c[u][j]<m)){
                        newdist=dist[u]+c[u][j];
                        if(newdist<dist[j]){dist[j]=newdist;prev[j]=u;}
                    }
    
        }
        for(i=0;i<=n;i++)
        {
            printf("%d ",prev[i]+1);
        }
        printf("\n");
    
    }
    void main()
    {
         int i;
         Dijkstra(dist);
         for(i=0;i<5;i++)
         printf("%d ",dist[i]);
         printf("\n");
         getch();
    }
    

     程序运行结果如图所示:

     其中,第一行数据是当前节点的前一个节点。

  • 相关阅读:
    Missing Ranges
    springboot整合quartz
    Quartz01
    springboot整合jap
    springboot集成redis
    springboot整合drui、mybatis、pagehelper
    springboot模板
    SpringBoot入门
    Java注解简介
    Git02(ssh key的配置和使用、idea配置并使用Git)
  • 原文地址:https://www.cnblogs.com/hesitate/p/2554135.html
Copyright © 2011-2022 走看看