`

迪杰斯特拉算法C语言实现

阅读更多
#ifndef GUIDE_H_INCLUDED
#define GUIDE_H_INCLUDED
#define MX 1000          //最大值 无穷
#define NUM  6            //最大顶点个数
typedef int adjmatrix[NUM][NUM];
typedef int path[NUM][NUM];
typedef int Dist[NUM];//v0到vi的的距离
int ps[NUM]={0}; //最短路径值
int final[NUM];//final[i]=1代表已经求出v0到vi的最短路径
const int vexs[NUM] = {0,1,2,3,4,5};
int arcs[NUM][NUM] = {
    {MX,MX,10,MX,30,100},
    {MX,MX,5,MX,MX,MX},
    {MX,MX,MX,50,MX,MX},
    {MX,MX,MX,MX,MX,10},
	{MX,MX,MX,20,MX,60},
	{MX,MX,MX,MX,MX,MX}
    };

#endif

 

#include <iostream>
using namespace std;
#include "guide.h"

//=====================================================
void ShorttestPath_DIJ(adjmatrix arc,int v,path &p,Dist &d)
{
	//用迪杰斯特拉算法求解v0到其余个点的最短路径,p[v][w]代表v0到v经过w
	
	
	int w=0;
	for(int nv=0;nv<NUM;nv++)
	{
      final[nv]=0;
	  d[nv]=arc[v][nv];
	  ps[nv]=d[nv];
	  for(int w=0;w<NUM;w++) p[nv][w]=false;
	  if(d[nv]<MX) 
	  {
		  p[nv][v]=1;
		  p[nv][nv]=1;
	  }
	}//for
	d[v]=0;
	final[v]=1;
	int min=MX;
	//开始主循环
	for(int i=1;i<NUM;++i)
	{
		min=MX;
		for(w=0;w<NUM;++w)
		{
			if(final[w]==0)
			{
			  if(d[w]<min)
			  {
			     v=w;
				 min=d[w];
			  }
			}
			
		}//for
			final[v]=1;
			for(w=0;w<NUM;w++)
			{
				if(final[w]==0&&(min+arc[v][w])<d[w])
				{
					d[w]=min+arc[v][w];
				    ps[w]=ps[v]+arc[v][w];
					 for(int pos=0;pos<NUM;pos++)
					 {
	                   p[w][pos]=p[v][pos];//借助最短路径到达w点
	 
					 }
					 p[w][w]=1;//经过w点
				}//endif
			
			}//for
    
		
	}//for
	
	
}

void DIJ_Print(int start,path &P)
{
  for(int i=1;i<NUM;i++)
  {
	     int u=i;
		 
	    if(final[i]==1)
		{
		 cout<<"距离:"<<ps[i]<<"\t";
		  cout<<start;
		  int m=start;
		   for(int j=1;j<NUM;j++)
		   {
			   
			  if( P[u][j]==1)
			  {
				  if(arcs[m][j]>0 && arcs[m][j]<MX) 
				  {
					  cout<<"->"<<j;
					  m=j;
					  j=1;
				  }
				  
			  }
		   }
		  cout<<endl;
		}//endif
	  }//endfor
}
void ShortestPath()
{
    int start = 5;
    
	Dist D;       //D[i]表示从start到i的最短距离;
    path P;       //P[i,j]表示从start到i的最短路径上会经过j
	int t[NUM]={0};
	int n=0;
    cout << "输入出发点 (0~5 空格分隔)" << endl;
    cin >> start;
    if(start>=0 && start<6)
    {
       //调用迪杰斯特拉算法
      ShorttestPath_DIJ(arcs,start,P,D);
	  cout <<"从"<< start;
      cout << "到其他各点的最短路径长度 :"<<endl ;
	  //调用迪杰斯特拉打印算法
	   DIJ_Print(start,P);
	 
    }//endif
    else
        cout << "没有这个地方!" << endl;
}


//============== mian文件 =============

int main()
{
    char choose=0;
    cout << "************************" << endl;
    cout << "    a.x到其他点的最短路径        " << endl;
    cout << "    b.退出            " << endl;
    cout << "    版本号v1.8        " << endl;
    cout << "************************" << endl;
    cin >> choose;
    while( choose!='b' )
    {
        if( choose=='a' )
        {
            ShortestPath();
            cout << "===========================" << endl;
            cout << "  a.x到y的最短路径 b.退出  " << endl;
            cout << "===========================" << endl;
        }
        else if(choose!='a'||choose!='b')    cout << "输入错误,请重新输入:";
        cin >> choose;
    }
    return 0;
}

 

分享到:
评论

相关推荐

    (精品)迪杰斯特拉算法C语言实现【整理】.txt

    (精品)迪杰斯特拉算法C语言实现【整理】.txt

    迪杰斯特拉算法程序C语言实现

    在C语言中实现迪杰斯特拉算法,需要理解以下几个关键知识点: 1. **图的概念**:在图论中,图是由顶点(节点)和边组成的集合。顶点代表实体,边代表顶点之间的关系或连接。 2. **有向图与无向图**:在迪杰斯特拉...

    迪杰斯特拉算法(c语言)

    自己用c语言写的迪杰斯特拉算法,存储方式为邻接矩阵表示法

    用C语言写的迪杰斯特拉算法,

    ### 使用C语言实现的迪杰斯特拉算法:深入解析与应用 #### 知识点一:迪杰斯特拉算法概述 迪杰斯特拉算法(Dijkstra's Algorithm)是由荷兰计算机科学家艾兹赫尔·迪杰斯特拉于1956年提出的一种用于寻找图中两点间...

    迪杰斯特拉算法的实现

    用c语言实现的地杰斯特拉算法,,,其中具体2.txt中的为: 6 9999 9999 10 9999 30 100 9999 9999 5 9999 9999 9999 9999 9999 9999 50 9999 9999 9999 9999 9999 9999 9999 10 9999 9999 9999 20 9999 60 9999 ...

    关键路径实现,迪杰斯特拉算法,弗洛伊德算法

    本篇文章将深入探讨这些主题,特别是关键路径的实现、迪杰斯特拉算法和弗洛伊德算法。 首先,关键路径(Critical Path Method, CPM)是一种项目管理技术,用于确定项目中最长的依赖路径,这条路径决定了项目的最短...

    迪杰斯特拉算法景点问题C语言

    在C语言中实现迪杰斯特拉算法,首先需要理解其基本步骤: 1. 初始化:创建一个图的数据结构,通常可以使用邻接矩阵或邻接表来表示。设置源节点的距离为0,其余所有节点的距离为无穷大。创建一个优先队列(如最小堆...

    迪杰斯特拉C语言实现.zip

    以下是对迪杰斯特拉算法及其C语言实现的详细解释: 1. **迪杰斯特拉算法介绍** - 迪杰斯特拉算法是一种基于贪心策略的单源最短路径算法,由荷兰计算机科学家艾兹格·迪杰斯特拉在1956年提出。 - 算法的核心思想是...

    C语言实现迪杰斯特拉算法

    C语言实现迪杰斯特拉算法,亲测好用,放在正确的环境下就可运行

    迪杰斯特拉算法C实现

    C语言实现迪杰斯特拉算法,首先需要定义数据结构来表示图,这通常可以通过邻接矩阵或邻接表来完成。邻接矩阵是一个二维数组,每个元素表示一对节点之间是否存在边及其权重;邻接表则是链表结构,每个节点存储其相邻...

    迪杰斯特拉算法程序

    可以直接运行的最短路径算法,C程序编写,注释清晰

    数据结构C语言版_迪杰斯特拉算法

    ### 数据结构C语言版_迪杰斯特拉算法详解 #### 核心概念解析 迪杰斯特拉算法(Dijkstra's Algorithm)是解决图论中单源最短路径问题的经典算法,由荷兰计算机科学家艾兹赫尔·迪杰斯特拉于1956年提出。该算法适用于...

    基于C语言的迪杰斯特拉算法仿真与实现.pdf

    在C语言中实现迪杰斯特拉算法,首先需要理解C语言的基本语法和结构,包括函数的定义和调用,以及数据结构的使用。 C语言是一种强大的编程语言,它支持多种数据结构,如栈、队列、树和图。在处理图数据结构时,迪杰...

    Dijkstra算法c语言程序

    该程序为Dijkstra算法的的c语言程序,Dijkstra算法一般指迪杰斯特拉算法。迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法,是从一个顶点到其余各顶点的最短路径算法,解决的...

    c语言课程设计 迪杰斯特拉算法的应用 (源程序+报告)

    在这个“C语言课程设计”项目中,我们使用C语言实现了迪杰斯特拉算法来解决最少费用问题。这个算法的核心在于寻找从源节点到其他所有节点的最短路径,特别适用于有向图或无向图中权值非负的情况。 在C语言中,实现...

    C语言实现Dijkstra算法

    通过阅读和理解这些代码,可以加深对Dijkstra算法及其C语言实现的理解。 总之,Dijkstra算法是图论中的重要算法,广泛应用于路由选择、网络最优化问题等领域。在C语言中实现Dijkstra算法需要掌握图的表示、优先队列...

    迪杰斯特拉算法实现源码

    用C语言写的简单的迪杰斯特拉算法实现,仅供参考,欢迎交流。

    迪杰斯特拉

    迪杰斯特拉算法 c语言实现 数据结构课程

Global site tag (gtag.js) - Google Analytics