迪杰斯特拉--单源最短路径算法实现

//图的存储--邻接矩阵
#define  MAXSIZE 100
#define  INF 65535
typedef struct 
{
	int  edges[MAXSIZE][MAXSIZE];//存放边的关系的数组
	int  n,e;//n是顶点个数 e是边的个数
	char vex[MAXSIZE];//存放顶点信息
}MGrap;

 

//创建图。
void createGrap(MGrap *g)
{

	cout <<"请输入顶点数和边的数"<>g->n>>g->e;
	cout<<"请输入顶点信息"<n;i++)
	{
		cin>>g->vex[i];
	}
	//初始化矩阵
	for (int i =0;in;i++)
	{
		for (int j =0;jn;j++)
		{
			g->edges[i][j] = 65535;
		}
	}
	cout<<"请输入边的信息:起始边和终止边 以及值"<e;i++)
	{
		int start, end,value;
		cin>>start>>end>>value;
		g->edges[start][end] = value;
	}
}

 

#include 
#include 
using namespace std;
//
//  Dijistra.h
//  Dijistra
//
//  Created by 吴珝君 on 2018/12/25.
//  Copyright  ©   2018年 闲着也是贤者. All rights reserved.
//

//图的存储--邻接矩阵
#define  MAXSIZE 100
#define  INF 65535
typedef struct 
{
	int  edges[MAXSIZE][MAXSIZE];//存放边的关系的数组
	int  n,e;//n是顶点个数 e是边的个数
	char vex[MAXSIZE];//存放顶点信息
}MGrap;

//创建图。

//单元最短路径的实现
void createGrap(MGrap *g)
{

	cout <<"请输入顶点数和边的数"<>g->n>>g->e;
	cout<<"请输入顶点信息"<n;i++)
	{
		cin>>g->vex[i];
	}
	//初始化矩阵
	for (int i =0;in;i++)
	{
		for (int j =0;jn;j++)
		{
			g->edges[i][j] = 65535;
		}
	}
	cout<<"请输入边的信息:起始边和终止边 以及值"<e;i++)
	{
		int start, end,value;
		cin>>start>>end>>value;
		g->edges[start][end] = value;
	}
}

void Dijistra(MGrap g,int* dist,int* path,int v)
{
	int set[MAXSIZE];
	int min =0;
	int u =0;
	for (int i =0;i  s;
	while(path[v]!= -1)
	{
		s.push(v);
		v= path[v];//孩子双亲表示法
	}
	s.push(v);
	while(!s.empty())
	{
		cout<

 

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