//2013/06/30<<数据结构与算法分析>>
#include<iostream>
#define INIT 300000//表示无穷
using namespace std;
void InitGraph(Graph &G,int * &distance,int *& visted,int n)//创建图中变量初始化
{
int i;
int j;
G=new int *[n];
for(i=0;i<n;++i)
G[i]=new int [n];
for(i=0;i<n;++i)
for(j=0;j<n;++j)
G[i][j]=INIT;
for(i=0;i<n;++i)
visted[i]=0;
for(j=0;j<n;++j)
distance[j]=INIT;
}
void CreateGraph(Graph &G,int n,int edge)//图的创建
{
int i;
int j;
int k;
int weight;
cout<<"please enter the node and weight==>>"<<endl;
for(k=0;k<edge;++k)
{
cin>>i>>j>>weight;
G[i][j]=weight;
}
}
int mixVertex(Graph &G,int * &distance,int *&visted,int n)//每次找源点到其他未访问的并且距离最小的点
{
int i,v;
for(i=0;i<n;++i)//每次都是从零开始找没有访问的
if(!visted[i]){v=i;break;}
for(i=i+1;i<n;++i)//
{
if((!visted[i])&& (distance[i]<distance[v]))//初始化距离的都是INIT
v=i;
}
return v;
}
void disfuc(Graph &G,int* &distance,int * &visted,int n)//源点到图中各点的最短路径
{
int i,v,w;
for(i=0;i<n;++i)
{
v=mixVertex(G,distance,visted,n);
visted[v]=1;
for(w=0;w<n;++w)//更新作用
{
if(v==0)distance[w]=G[v][w];///针对当w=0的时候,必须做出更新
if(distance[w]>distance[v]+G[v][w])
distance[w]=distance[v]+G[v][w];
}
}
}
int main()
{
int n=5;
int edge=7;
int i;
int * visted;
int * distance;
Graph G;
visted=new int[n];
distance=new int[n];
InitGraph(G,distance,visted,n);
CreateGraph(G,n,edge);
disfuc(G,distance,visted,n);
for(i=0;i<n;++i)
cout<<distance[i]<<endl;
}
时间复杂度0(edge^2).