dijkstra O(n2) 算法模版

来源:互联网 发布:python arma模型 编辑:程序博客网 时间:2024/04/30 16:43
#include <iostream>#include <memory>using namespace std;const int maxint = 9999999;const int maxn = 1010;int data[maxn][maxn], lowcost[maxn];//data 存放点点之间的距离, lowcost存放点到start 的距离,从0开始存放bool used[maxn];   //标记点是否被选中int n;//顶点的个数 void dijsktra( int start )//初始点是start的dijkstra 算法{int i, j;memset( used, 0, sizeof(used) );//初始所有点都未被标记for( i = 0; i < n; i++ )lowcost[i] = data[start][i];//初始点到其他所有点的距离used[start] = true;//初始点被标记lowcost[start] = 0;//初始点到自身永远是0, 最短的路径for( i = 0; i < n-1; i++ )//因为第一个点start已经选过了,所有还剩下n-1个点{//choose min选择一个点int tempmin = maxint;int choose;for( j = 0; j < n; j++ )//一轮循环表示选出一个点  {if( !used[j] && tempmin > lowcost[j] )//类似max值动态更新{choose = j;tempmin = lowcost[j];}}used[choose] = true;//被选中的点被标记   最后选出了一个choose点 // updata others更新lowcost[]  for( j = 0; j < n; j++ ){if( !used[j] && data[choose][j]     <     maxint   && lowcost[choose] + data[choose][j] < lowcost[j] )/*   找 choose到 其他未选中的距离存在的点  < maxint表示距离存在  &&  start点到choose的距离+ choose点到这个点的距离 < start点到这个点的距离   */lowcost[j] = lowcost[choose] + data[choose][j];    //如果满足上面那个if条件的话则更新数组 }}}