图 单源最短路径求解 Dijkstra算法 C++ 实现

<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;
}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值