首页 > 代码库 > dijkstra

dijkstra

#define maxSize 10//节点类型class VNode{public:	int no;	char info;};//图类型class MGraph{public:	float edges[maxSize][maxSize];//float表示权值	int n,e;	VNode vex[maxSize];};void dijkstra(MGraph g, int v, int dist[],int path[]){	int set[maxSize];//存放已经确定的节点	//初始化dist,path,set数组	for(int i = 0; i < g.n; ++i)	{		dist[i] = g.edges[v][i];		set[i] = 0;		if(g.edges[v][i] < INT_MAX)		{			path[i] = v;		}else		{			path[i] = -1;		}	}	set[v] = 1;//把起始点加入set中	int min = INT_MAX;	int min_index = -1;//每一次找dist最小的点加入	for(int j = 0; j < g.n; ++j)	{		//找到dist最小的点		for(int k = 0; k < g.n; ++k)		{			if(set[k] == 0 && dist[k] < min)			{				min = dist[k];				min_index = k;			}			}		set[min_index] = 1;//把dist最小的点加入		//以dist最小的点作为中间点,去更新其他的dist与对应的path		for(int k = 0; k < g.n; ++k)		{			if(set[k] == 0 && dist[min_index] + g.edges[min_index][k] < dist[k])			{				dist[k] = dist[min_index] + g.edges[min_index][k];				path[k] = min_index;			}		}			}}

  

dijkstra