数据结构图之Dijkstra(迪杰斯特拉)算法

简介: 数据结构图之Dijkstra(迪杰斯特拉)算法

写了一个下午的Dijkstra(迪杰斯特拉)算法 (其实写了1个小时 其余时间一直在改错还是最后结果不匹配    找了一个下午终于找到了   是输入邻接矩阵时 在没有路线时原本是输入-1 结果不对  经过调整  输入32767  结果正确)希望在我身上发生的能让个位看官避雷而且希望我的代码可以对更多人有帮助。

跟着小v不迷路,希望给小v一个三连。上代码。

# include <stdio.h>
 # define max 100
typedef struct {
  int v[max];              //定点表 
  int arc[max][max];       //邻接矩阵 
  int vnum , bnum;     //定点数     边数 
} tu;  
 tu creat (tu t)
 {
  printf("请输入定点数和边数"); 
   //输入顶点数    边数 
  scanf("%d",&(t.vnum));
   // printf("进行到这了"); 
  scanf("%d",&(t.bnum));   
  for(int i=0;i<t.vnum;i++)   //初始化  顶点表 
   {
      printf("请输入顶点"); 
    scanf("%d",&t.v[i]); 
     }
        printf("请输入边的权值"); 
     for(int i=0;i<t.vnum;i++)
   {
      for(int j=0;j<t.vnum;j++)
       {
      scanf("%d",&t.arc[i][j]); 
       }  
    }
     for(int i=0;i<t.vnum;i++)
     {
         for(int j=0;j<t.vnum;j++)
         {
             printf("%d ",t.arc[i][j]);
         }
         printf("\n");
     }  
    return t;
     } 
int findmin(int *dist,int *s,int n)
{
  int j,k=0;
  int min=32767;
  for(j=0;j<n;j++)
  {
    if((s[j]==0)&&(dist[j]<min))
    {
      min=dist[j];
      k=j;
    }
  }
//  if(k==0)
//  return -1;
//  else
  return k; 
}
   /*
存储结构   带权的邻接矩阵     因为要随时读取数据   所以用邻接矩阵 
    按路径长度递增的次序产生最短路径的算法 
    dist[]数组      存储权值       没有就赋值为-1  不考虑s数组中的顶点 
    path[]数组      表示找到了从初始点到vi的最短路径   存双亲节点 
    若有弧长  则为0       否则为-1 
    s[]数组   存放源点和已经生成的终点  初始状态只有起点 
*/
   void Djstl(tu t)
     {
      int i,min,num;
      int dist[t.vnum];       
      int path[t.vnum];
      int s[t.vnum];
      //初始化 
      //先以第一行的权值进行赋值
      for(i=0;i<t.vnum;i++)
     {
      s[i]=0;                 //初始化均为0  表示未进入路径   进入路径为1 
      dist[i]=t.arc[0][i];      //表示 0   到各个顶点的距离      未相连接为-1 
      if(dist[i]!=32767)            //表示为 某个点到到改点有路径  可以到达 
      {
        path[i]=0 ;             //       初始化    所有点的父顶点都为0号源点 
       }
       else
       path[i]=-1;
      } 
      s[0]=1 ;            //表示已经进入路径 
      num=1; 
      while(num<t.vnum)
      {
        min=findmin(dist,s,t.vnum);
        s[min]=1;
        for(i=0;i<t.vnum;i++)
        { 
            if((s[i]==0)&&(dist[i]>dist[min]+t.arc[min][i]) )
      {
        dist[i]=dist[min] + t.arc[min][i];
        path[i]=min;        
       //  printf("%d",num);       if  只进行了3次    
      }
        }
        num++;
//      printf("%d\n",num); 
      }
      printf("输出的是dist数组:");
      for(i=0;i<t.vnum;i++)
      {
        printf("%d ",dist[i]);  
      }
      printf("\n");
       printf("输出的是path数组:");
       for(i=0;i<t.vnum;i++)
      {
        printf("%d ",path[i]);  
      }
       printf("\n");
        printf("输出的是数组:");
       for(i=0;i<t.vnum;i++)
      {
        printf("%d ",s[i]); 
      }
   }
int main()
{
  tu t;
  t=creat(t);
  Djstl(t);
  return 0;
}


目录
打赏
0
0
0
0
10
分享
相关文章
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
70 15
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
20天前
|
基于 Python 迪杰斯特拉算法的局域网计算机监控技术探究
信息技术高速演进的当下,局域网计算机监控对于保障企业网络安全、优化资源配置以及提升整体运行效能具有关键意义。通过实时监测网络状态、追踪计算机活动,企业得以及时察觉潜在风险并采取相应举措。在这一复杂的监控体系背后,数据结构与算法发挥着不可或缺的作用。本文将聚焦于迪杰斯特拉(Dijkstra)算法,深入探究其在局域网计算机监控中的应用,并借助 Python 代码示例予以详细阐释。
42 6
|
1月前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
57 9
 算法系列之数据结构-二叉树
|
1月前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
65 3
 算法系列之数据结构-Huffman树
|
1月前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
82 22
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
111 29
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
143 25
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
112 23
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)