Dijkstra算法算最短路径急求一个Dijkstra算最短路径的代码,要完整的(包括头文件,生成距阵),可直接运行的.

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 00:13:35

Dijkstra算法算最短路径急求一个Dijkstra算最短路径的代码,要完整的(包括头文件,生成距阵),可直接运行的.
Dijkstra算法算最短路径
急求一个Dijkstra算最短路径的代码,要完整的(包括头文件,生成距阵),可直接运行的.

Dijkstra算法算最短路径急求一个Dijkstra算最短路径的代码,要完整的(包括头文件,生成距阵),可直接运行的.
////////////////////////////////////////////////////////////
// Graph.h
#pragma once
#define maxPoint 100
class CGraph
{
public:
CGraph(void);
CGraph(void);
bool SetGraph( double g[maxPoint][maxPoint] ,int startPoint ,int size );
bool Dijkstra();
void Display();
int GetStartPoint();
double GetBestWay( int dest ,int path[] ,int &pathLen );
private:
//标志当前图是否已经求解
bool solved;
//当前图布局
double graph[maxPoint][maxPoint];
//地图大小
int size;
//起点
int startPoint;
//当前图的解
double dist[maxPoint];
int prev[maxPoint];
};
////////////////////////////////////////////////////////////
// Graph.cpp
#include 'StdAfx.h'
#include '.\graph.h'
CGraph::CGraph(void)
{
for( int i = 0 ; i < maxPoint ; i++ )
{
for( int j = 0 ; j < maxPoint ; j++ )
graph[i][j] = -1;
}
startPoint = -1;
size = -1;
//当前图还没有求解
solved = false;
}
CGraph::CGraph(void)
{
}
//
//
bool CGraph::SetGraph( double g[maxPoint][maxPoint] ,int startPoint ,int size )
{
for( int i = 0 ; i < size ; i++ )
{
for( int j = 0 ; j < size ; j++ )
graph[i][j] = g[i][j];
}
this->startPoint = startPoint;
this->size = size;
solved = false;
Dijkstra();
return true;
}
//
//
bool CGraph::Dijkstra()
{
bool s[maxPoint];
for( int j = 0 ; j < size ; j++ )
{
dist[j] = graph[startPoint][j];
s[j] = false;
//dist[i] 0 && dist[j] < temp )
{
u = j;
temp = dist[j];
}
}
else
{
u = j;
temp = dist[j];
flag = true;
}
}
}
s[u] = true;
for( int j = 0 ; j < size ; j++ )
{
if( !s[j] && graph[u][j] > 0 )
{
double newDist = dist[u] + graph[u][j];
if( dist[j] < 0 || newDist < dist[j] )
{
dist[j] = newDist;
prev[j] = u;
}
}
}
}
//标记当前问题已经解决
solved = true;
return true;
}
//
//
void CGraph::Display()
{
printf( '当前地图的邻接矩阵\n' );
for( int i = 0 ; i < size ; i++ )
{
for( int j = 0 ; j < size ; j++ )
{
printf( '%5.f' ,graph[i][j] );
}
printf( '\n' );
}
}
//
//
double CGraph::GetBestWay( int dest ,int path[] ,int &pathLen )
{
int p = dest;
int theway[maxPoint];
int len = 0;
while( p != startPoint )
{
theway[len] = p;
p = prev[p];
len++;
}
theway[len] = startPoint;
len++;
for( int i = 0 ,j = len - 1 ; i < len ; i++ ,j-- )
path[i] = theway[j];
pathLen = len;
return dist[dest];
}
//
//
int CGraph::GetStartPoint()
{
return startPoint;
}
//
////////////////////////////////////////////////////////////
// Dijkstra.cpp :定义控制台应用程序的入口点.
//
#include 'stdafx.h'
#include 'conio.h'
#include 'Graph.h'
int _tmain(int argc,_TCHAR* argv[])
{
double graph[][maxPoint] =
{
{ 1 ,10 ,-1 ,30 ,100 } ,
{ -1 ,0 ,50 ,-1 ,-1 } ,
{ -1 ,-1 ,0 ,-1 ,10 } ,
{ -1 ,-1 ,20 ,0 ,60 } ,
{ -1 ,-1 ,-1 ,-1 ,-1 }
};
int size = 5;
int start = 0;
int dest = 1;
int pathlen;
int path[maxPoint];
double dist;
CGraph g;
g.SetGraph( graph ,start ,size );
g.Display();
printf( '----------------------------------------\n' );
for( dest = 0 ; dest < size ; dest++ )
{
dist = g.GetBestWay( dest ,path ,pathlen );
printf( '从 %d 到 %d 的最短路径长 %.f\n' ,g.GetStartPoint() ,dest ,dist );
printf( '所经结点为:\n' );
for( int i = 0 ; i < pathlen ; i++ )
printf( '%3d' ,path[i] );
printf( '\n----------------------------------------\n' );
}
getch();
return 0;
}
////////////////////////////////////////////////////////////
// 程序说明:
// 本程序在 VC++.NET 2003 上调试通过
// 首先建立 Win32控制台应用程序,工程名为 Dijkstra
// 工程设置默认
// 添加 一般C++类 CGraph
// 填写以上内容

Dijkstra算法算最短路径急求一个Dijkstra算最短路径的代码,要完整的(包括头文件,生成距阵),可直接运行的. 用C#求dijkstra算法求最短路径 关于matlab中的一个Dijkstra算法应用算法如下:function[d,DD]=dijkstra(D,s)%Dijkstra最短路算法Matlab程序用于求从起始点s到其它各点的最短路%D为赋权邻接矩阵%d为s到其它各点最短路径的长度%DD记载了 最短路径的Dijkstra算法思路 matlab运行dijkstra函数出错function [d,DD]=dijkstra(D,s)%Dijkstra最短路算法Matlab程序用于求从起始点s到其它各点的最短路%D为赋权邻接矩阵%d为s到其它各点最短路径的长度; %DD记载了最短路径生成树[m,n matlab求最短路,运行dijkstra函数时出错function [d,DD]=dijkstra(D,s)%Dijkstra最短路算法Matlab程序用于求从起始点s到其它各点的最短路%D为赋权邻接矩阵%d为s到其它各点最短路径的长度; %DD记载了最短路 dijkstra算法 最短路径问题话说dijkstra算法可以求解一个节点到其他各节点的最短路径,但是如果节点间存在多条等长的最短路径怎么对这个算法修改呢?不要floyd算法或者别的算法,就dijkstra算法. 跪求解释 Matlab中graphshortestpath的具体用法 需要什么参数,矩阵,得到什么结果?是一个最短路径问题,据说是封装好的floyd,Dijkstra 算法 最短路径问题是有权还是没权问题呢? 关于Dijkstra算法和Floyd算法Dijkstra算法和Floyd算法都可以求给定点到其他点的最短路径,可是一个代码复杂,请问在什么情况下用哪个比较容易呢? 谁能举一个Pascal中Dijkstra算法求单源最短路径问题的例子并作一些说明,要有程序.不要讲得太深奥. 以邻接表作存储结构实现求从源点到其余各顶点的最短路径的Dijkstra算法 Dijkstra最短路算法通用Matlab程序 Dijkstra最短路算法通用Matlab程序function [d,DD]=dijkstra(D,s)%Dijkstra最短路算法Matlab程序用于求从起始点s到其它各点的最短路%D为赋权邻接矩阵%d为s到其它各点最短路 (用Dijkstra算法)求出图中顶点1到其余各顶点的最短路径 数据结构作业 求最短路径 试设计一个算法求图中一个源点到其他个顶点的最短路径.基本要求:以邻接表作为存储结构;用Dijkstra算法求最短路径;按长度非递减次序打印输出最短路径的长 求文档:Dijkstra 距离寻优算法程序 Dijkstra 算法是什么?Dijkstra 在哪里用 试用Dijkstra算法求从v1到其余各顶点的最短路径,写出每一步的状态.算法我会,主要是步奏!下图为题目图,还有就是谁有2013南京航空航天大学829试卷的答案啊? 采用Dijkstra算法求解带权有向图的最短路径问题时,要求图中i跳变所带的权值必须是(C)数A.非零 B 非整 C 非负 D非正