dijkstra算法

dijkstra算法:

是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。

算法思想
从第一个顶点出发,将每一个与之相邻顶点的路径长度更新到最短路径长度之中去。
再找到目前既是最短长度又是未被访问的顶点,从这个顶点再次出发,如果第一个顶点到这个顶点的路径长度+这个顶点到某一顶点的路径长度<第一个顶点到某一顶点的路径长度,则更新到最短路径长度之中去。重复以上过程,直到所有的顶点都被访问过(被作为出发顶点)。
样例求解
计算出从顶点 1 到顶点 n 的最短路径(最小疲劳值),已知最大疲劳值不会超过100,
因此初始化 INF=101
dijkstra算法_第1张图片
样例代码

void Dijkstra(mGraph* graph,int eNum){
	for(int i=0;igetNum();i++){
		for(int j=0;jgetNum();j++){
			int weight;
			if(i==j)weight=0;
			else weight=INF;
			graph->setEdge(i,j,weight);
		}
	}
	int t,x,y,weight;
	for(int i=0;i>t>>x>>y>>weight;
		if(t==1)weight*=weight;
		graph->setEdge(x-1,y-1,weight);
	}
	int distance[graph->getNum()];
	for(int i=0;igetNum();i++){
		distance[i]=graph->getWeight(0,i);
	}
	graph->setMark(0,VISITED);	
	for(int k=0;kgetNum();k++){
		int v;
		int min=INF;
		for(int i=0;igetNum();i++){
			if(graph->getMark(i)==UNVISITED&&distance[i]setMark(v,VISITED);
		for(int i=0;igetNum();i++){
			if(graph->getWeight(v,i)+distance[v]getMark(i)==UNVISITED){
				distance[i]=graph->getWeight(v,i)+distance[v];
			}
		}
	}
	cout<getNum()-1]<

你可能感兴趣的:(数据结构)