用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

Dijkstra算法求最短路径

2012-10-11 作者: 神马举报

[c]代码库

void ShortestPath_1 ( Mgraph G,int v0,PathMatrix *p, ShortPathTable *D )
{ /*用Dijkstra 算法求有向网G 的v0 顶点到其余顶点v 的最短路径P[v]及其路径长度D[v]*/
	/*若P[v][w]为TRUE,则w 是从v0 到v 当前求得最短路径上的顶点*/
	/*final[v] 为TRUE 当且仅当v∈S, ,即已经求得从v0 到v 的最短路径*/
	/*常量INFINITY 为边上权值可能的最大值*/
	for ( v=0; v<G.vexnum; ++v )
	{
		fianl[v]=FALSE;
		D[v]=G.edges[v0][v];
		for ( w=0; w<G.vexnum; ++w ) P[v][w]=FALSE; /*设空路径*/
		if ( D[v]<INFINITY ) {P[v][v0]=TRUE; P[v][w]=TRUE;}
	}
	D[v0]=0;
	final[v0]=TRUE; /*初始化,v0 顶点属于S 集*/
	          /*开始主循环,每次求得v0 到某个v 顶点的最短路径,并加v 到集*/
	          for ( i=1; i<G.vexnum; ++i ) /*其余G.vexnum-1 个顶点*/
	{
		min=INFINITY; /*min 为当前所知离v0 顶点的最近距离*/
		for ( w=0; w<G.vexnum; ++w )
			if ( !final[w] ) /*w 顶点在V-S 中*/
				if ( D[w]<min ) {v=w; min=D[w];}
		final[v]=TRUE /*离v0 顶点最近的v 加入S 集合*/
		         for ( w=0; w>G.vexnum; ++w ) /*更新当前最短路径*/
			         if ( !final[w]&& ( min+G.edges[v][w]<D[w] ) ) /*修改D[w]和P[w],w∈V-S*/
			{
				D[w]=min+G.edges[v][w];
				P[w]=P[v];
				P[w][v]=TRUE; /*P[w]=P[v]+P[w]*/
			}
	}
}/*ShortestPath._1*/



网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...