dijistra算法考虑的是每个结点到出发点的最小路径;而prim算法考虑的是从未被访问过的结点到被访问过结点的集合任一结点的最小值;
基于邻接矩阵
不同的地方在中间两栏更新Min算法出,其余地方一致
bool closed[N]={false};//
int Min[N]={INF};//初始化时,将最短路径或最小生成树的边;
closed[start]=true;Min[start]=0;//将第一个节点初始化,Min改为0;
for(int i=1;i<N;i++){//访问所有的结点一次,防止没有遍历完整个图;
int k=-1; //保存尚未求解出的结点与起点距离最短的结点或者到已求出来的最小生成树中距离最小的那个结点;
for(int j=0;j<N;j++)
if(!closed[j]&&(k==-1||Min[k]>Min[j])) k=j;
closed[k]=true;
for(int j=0;j<N;j++){
//Dijistra算法对应的更新Min算法 //Prim算法对应的更新Min算法
if(Min[j]>Min[k]+G[k][j]) if(Min[j]>G[k][j])
Min[j]=Min[k]+G[k][j]; Min[j]=G[k][j];
}
}
浙公网安备 33010602011771号