<pre name="code" class="cpp">/*
* File name : graph_dijkstra.cpp
* Function : 图 单源最短路径求解 Dijkstra算法 C++ 实现
* Created on : 2016年6月2日
* Author : beijiwei@qq.com
* Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
任何单位和个人不经本人允许不得用于商业用途
input:
6 9
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 6 15
4 5 13
5 6 4
*/
#include <cstdio>
#include <iostream>
using namespace std;
#define MAX 10
#define INFY 99999
int map[MAX][MAX];
int dis[MAX];
int mark[MAX];
int main(int argc, char** argv)
{
int vertex_num,edge_num,min,start;
int i,j,k,weight;
freopen("input.txt", "r", stdin);
cin>>vertex_num>>edge_num;
for(int i=0;i<edge_num;i++) // initial
for(int j=0;j<edge_num;j++)
{
if( i==j )
map[i][j]=0;
else
map[i][j]=INFY;
}
for(int k=1; k<= edge_num; k++)// 读入边的信息
{
cin>>i>>j>>weight;
map[i][j]=weight;
}
/*********************************************************************************************/
for(int k=0; k<=vertex_num; k++)
{
mark[k]=0;
dis[k]=map[1][k];
}
mark[1]=1;
for(k=1;k<=vertex_num;k++)
{
min=INFY;
start=0;
for( i=1;i<=vertex_num;i++)//找到距离 一号顶点 最近的顶点
{
if( mark[i]==0 && dis[i] < min)
{
min=dis[i];
start=i;
}
}
mark[start]=1;
for( j=1;j<=vertex_num;j++)
{
if( map[start][j] < INFY)
{
if( dis[j] > dis[start] + map[start][j])
{
dis[j] = dis[start] + map[start][j];
}
}
}
}
/*********************************************************************************************/
for(int i=1; i<= vertex_num;i++)
{
cout<<"1号顶点和"<<i<<"号顶点的最短距离是"<<dis[i]<<endl;
}
return 0;
}
图 单源最短路径求解 Dijkstra算法 C++ 实现
最新推荐文章于 2022-11-20 17:46:01 发布