迪杰斯特拉-最短路径算法

迪杰斯特拉-最短路径算法_第1张图片

#include 
#include 
#include 
#include 
#include 
using namespace std;
//变量
int L[10]={0};//L(i)//记录路径
int exsist[10]={0};//判断点是否存在的集合
int pre[10]={0};//记录前导点
//vector path;//记录最短路径结点//后来发现思路不对//每次记录min点会出现不连续的路径
int jiedian;//结点个数//从V1开始
//变量

//判断点是否存在
bool ifexsist(int exsist[10],int judgepoint){
    if(exsist[judgepoint]==1) return 1;
    else return 0;
}
//找出min(L(i))
int minLi(int L[10],int exsist[10]){
    int temp;
    for(int i = 1;i<=jiedian;i++){
        if(exsist[i]==1) {
            temp = i;
            break;
        }//min赋初值
    }
    int min=temp;
    for(int i = 1; i <=jiedian; i++){
        if((exsist[i]==1) && (L[i]>jiedian;
    int tu[10][10]={0};
    cout<<"请输入边和权值,输入0,0,0时结束"<>b1>>b2>>q;
        tu[b1][b2]=q;
        //tu[b2][b1]=q;
    }
    cout<<"图的邻接矩阵如下:"<>begin>>end;
    
    L[begin] = 0;
    
    while(1){
        int min = minLi(L, exsist);
        //出度
        if(min == end) break;
        for(int m=1; m<=jiedian; m++){
            //if(m==min) continue;
            if(tu[min][m]!=0){
                //先判断临点存在
                if(ifexsist(exsist, m)){
                    int temp = L[min] + tu[min][m];
                    //替换L
                    if(temp < L[m]) {
                        pre[m]=min;
                        L[m]=temp;
                    }
                }
            }
                
        }
        //所有临点判断完
        exsist[min]=0;
        //path.push_back(min);
    }
    int t = end;
    cout<<"最短路径为:"<

迪杰斯特拉-最短路径算法_第2张图片



你可能感兴趣的:(离散数学)