打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Dijkstra算法的实现
 //main.h
    #include <stdio.h>
    #include "Dijkstra.h"
    int main()
    {
     int  Graph_list_search[max][max]={{0,3,2,5,9999,9999},
     {9999,0,9999,2,9999,9999},
     {9999,9999,0,1,9999,9999},
     {9999,9999,9999,0,9999,5},
     {9999,9999,5,3,0,1},
     {9999,9999,9999,9999,9999,0}};
     printf_edge(Graph_list_search);
     Dijkstra(Graph_list_search,0,5);
     return 0;
    }

    //Dijkstra.h
    #define max 6
    int find_minimum_route(int route[100],int visit[100],int *position,int vertex_number)
    {
     int i;
     int tag=0;
     int temp;
     i=0;
     temp=9999;
     while(i<vertex_number)//route[i]!='\0'
     {
      if((temp>route[i])&&visit[i]==0)
      {
       temp=route[i];
       *position=i;
       tag=1;
      }
      i++;
     }
     if(tag=1)return temp;
     else
     {
      *position=vertex_number;
      return 9999;
     }
    }
    void Dijkstra(int Graph_list_search[max][max],int first,int end){
     int i;
     int Graph_minimum_Distance[max];
     int Graph_visit[max];
     int Graph_minimum_road[max][max];
     for(i=0;i<max;i++)
     {
      Graph_minimum_Distance[i]=Graph_list_search[first][i];
      Graph_visit[i]=0;
      for(int w=0;w<max;++w)
       Graph_minimum_road[i][w]=0;//store the road
      if(Graph_minimum_Distance[i]<9999){
       Graph_minimum_road[i][first]=1;
       Graph_minimum_road[i][i]=1;
      }
     }
     int position;
     int minimum_Distance;
     Graph_minimum_Distance[first]=0;
     Graph_visit[first]=1;
     for(int h=1;h<max;h++){
      minimum_Distance=find_minimum_route(Graph_minimum_Distance,Graph_visit,&position,max);
      Graph_visit[position]=1;
      for(i=0;i<max;i++){
       if(Graph_visit[i]==0){
        if(Graph_minimum_Distance[i]>minimum_Distance+Graph_list_search[position][i]){
         Graph_minimum_Distance[i]=minimum_Distance+Graph_list_search[position][i];
         for(int j=0;j<max;j++)
          Graph_minimum_road[i][j]=Graph_minimum_road[position][j];
         Graph_minimum_road[i][i]=1;
        }
       }
      }//while(i<max)
     }
     printf("The minimum road is(vertex%d->vertex%d):\n",first,end);
     for(i=0;i<max&&printf("->");i++){
      if(Graph_minimum_road[end][i]==1)printf("vertex%d",i);
     }
     printf("\n");
    }
   //main.h
    #include <stdio.h>
    #include "Dijkstra.h"
    int main()
    {
     int  Graph_list_search[max][max]={{0,3,2,5,9999,9999},
     {9999,0,9999,2,9999,9999},
     {9999,9999,0,1,9999,9999},
     {9999,9999,9999,0,9999,5},
     {9999,9999,5,3,0,1},
     {9999,9999,9999,9999,9999,0}};
     printf_edge(Graph_list_search);
     Dijkstra(Graph_list_search,0,5);
     return 0;
    }

    //Dijkstra.h
    #define max 6
    int find_minimum_route(int route[100],int visit[100],int *position,int vertex_number)
    {
     int i;
     int tag=0;
     int temp;
     i=0;
     temp=9999;
     while(i<vertex_number)//route[i]!='\0'
     {
      if((temp>route[i])&&visit[i]==0)
      {
       temp=route[i];
       *position=i;
       tag=1;
      }
      i++;
     }
     if(tag=1)return temp;
     else
     {
      *position=vertex_number;
      return 9999;
     }
    }
    void Dijkstra(int Graph_list_search[max][max],int first,int end){
     int i;
     int Graph_minimum_Distance[max];
     int Graph_visit[max];
     int Graph_minimum_road[max][max];
     for(i=0;i<max;i++)
     {
      Graph_minimum_Distance[i]=Graph_list_search[first][i];
      Graph_visit[i]=0;
      for(int w=0;w<max;++w)
       Graph_minimum_road[i][w]=0;//store the road
      if(Graph_minimum_Distance[i]<9999){
       Graph_minimum_road[i][first]=1;
       Graph_minimum_road[i][i]=1;
      }
     }
     int position;
     int minimum_Distance;
     Graph_minimum_Distance[first]=0;
     Graph_visit[first]=1;
     for(int h=1;h<max;h++){
      minimum_Distance=find_minimum_route(Graph_minimum_Distance,Graph_visit,&position,max);
      Graph_visit[position]=1;
      for(i=0;i<max;i++){
       if(Graph_visit[i]==0){
        if(Graph_minimum_Distance[i]>minimum_Distance+Graph_list_search[position][i]){
         Graph_minimum_Distance[i]=minimum_Distance+Graph_list_search[position][i];
         for(int j=0;j<max;j++)
          Graph_minimum_road[i][j]=Graph_minimum_road[position][j];
         Graph_minimum_road[i][i]=1;
        }
       }
      }//while(i<max)
     }
     printf("The minimum road is(vertex%d->vertex%d):\n",first,end);
     for(i=0;i<max&&printf("->");i++){
      if(Graph_minimum_road[end][i]==1)printf("vertex%d",i);
     }
     printf("\n");
    }
    void printf_edge(int Graph_list_search[max][max])
    {
     printf("The example edge is:\n");
     for(int i=0;i<max;i++){
      for(int j=0;j<max;j++)
       printf("%d ",Graph_list_search[i][j]);
      printf("\n");
     }
    }

  void printf_edge(int Graph_list_search[max][max])
    {
     printf("The example edge is:\n");
     for(int i=0;i<max;i++){
      for(int j=0;j<max;j++)
       printf("%d ",Graph_list_search[i][j]);
      printf("\n");
     }
    }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用Dijkstra算法输出最短路径以及对应的最小权值
图的广度优先搜索(邻接表)
图遍历应用
图的定义、广度搜索、深度搜索
3.15
C语言图的创建
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服