数据结构--6.0最短路径

目录

一、迪杰斯特拉算法(Dijkstra)

二、弗洛伊德算法(Floyd)


 

在网图和非网图中,最短路径的含义是不同的。

——网图是两顶点经过的边上的权值之和最少的路径。                                                                    

——非网图是两顶点之间经过的边数最少的路径。

我们把路径起始的第一个顶点称为源头,最后一个顶点称为终点。

关于最短路径的算法:

1、迪杰斯特拉算法(Dijkstra)

2、弗洛伊德算法(Floyd)

一、迪杰斯特拉算法(Dijkstra)

#include 
#include 

#define MAXVEX 9
#define INFINITY 65536

typedef int Patharc[MAXVEX];				//用于存储最短路径下标的数组 
typedef int ShortPathTable[MAXVEX];			//用于存储到各点最短路径的权值 

void ShortestPath_Dijkstra(MGraph G , int V0,Patharc *p,ShortPathTable *D)
{
	int v,w,k,min;
	int final[MAXVEX];						//final[w]=1 表示已经求得顶点v0到vw的最短路径 
	
	//初始化数据 
	for(v=0;v

二、弗洛伊德算法(Floyd)

        弗洛伊德算法非常简洁优雅。

 

#include 
#include 

#define MAXVEX 9
#define INFINITY 65536

typedef int Pathmatirx[MAXVEX][MAXVEX];
typedef int ShortPathTable[MAXVEX][MAXVEX];

void ShortestPath_Floyd(MGraph.G,Pathmatirx *p,ShortPathTable *D)
{
	int v,w,k;
	//初始化  D  和   p 
	for(v=0;v ((*D)[v][k] + (*D)[k][w]))
				{
					(*D)[v][w] = (*D)[v][k] + (*D)[k][w];
					(*p)[v][w] = (*p)[v][k];
				}
			}
		}
	}
} 

你可能感兴趣的:(数据结构,算法)