Dijkstra算法的源代码

这篇博客提供了Dijkstra算法的C++实现源代码,包括`main.cpp`、`printHelp.h/cpp`、`map.h/cpp`和`process.h/cpp`等文件,详细解释了如何使用该算法寻找图中的最优路径。
摘要由CSDN通过智能技术生成

本篇博客是上一篇博客:Dijkstra最优路径算法及具体C++实例的源代码
https://blog.csdn.net/qq_40369246/article/details/86619696

main.cpp文件

#include<iostream>
#include "printHelp.h"

int main(){
   
    run();
}

printHelp.h文件

void run();

printHelp.cpp文件

#include<iostream>
#include "map.h"
#include "process.h"
using namespace std;

//打印菜单程序 
void printWindow(){
   
    cout<<"-----------------------------最优路径求解---------------------------------"<<endl<<endl;
    cout<<"**************************************************************************"<<endl<<endl;
    cout<<"---------------------------1.输入地图-------------------------------------"<<endl;
    cout<<"---------------------------2.打印地图-------------------------------------"<<endl;
    cout<<"---------------------------3.求解最优路径---------------------------------"<<endl;
    cout<<"---------------------------4.退出-----------------------------------------"<<endl<<endl;
    cout<<"**************************************************************************"<<endl<<endl; 
}

void run(){
   
    GraphMatrix graph;
    bool Initialize = false;
    printWindow();
    while(1){
   
    int Choice;
    cout<<"请输入你的选择:";
    cin>>Choice;
    if (Choice == 1){
   
        graph.createdGraph();
        if (graph.n() != NULL){
   
            Initialize = true;
        }
        system("pause");
    }else if(Choice == 2){
   
        if (Initialize == false){
   
            cout<<"未初始化有向图,请初始化有向图!!"<<endl;
        }else{
   
        graph.printGraph();
        }
        system("pause");
    }else if (Choice == 3){
   
        if (Initialize == false){
   
            cout<<"未初始化有向图,请初始化有向图!!"<<endl;
        }else{
   
        getBestRoute(&graph);
        }
        system("pause");
    }else if (Choice == 4){
   
        exit(1);
    }else{
   
        cout<<"无效输入,请重新输入!!!"<<endl;
        cin.clear();//清除错误状态
        cin.sync();//忽略掉输入缓冲区的数据
        system("pause");
    }
    system("cls");
    printWindow();
 } 
}

map.h文件

#include<string.h>

enum{
   
    VISITED, UNVISITED,
};

class GraphMatrix{
   
    public:
        ~GraphMatrix();
  
        void createdGraph();
        void printGraph();
  
        //输入定点数
        void inputVertexNumber(); 
        //生成定点数组 
        void makeVertexArray();
        //输入边数 
        void inputEdgeNumber();
        //输入边的信息 
        void inputEdgeInfo();
        //添加边结点至对应的链表中
        void addEdgeToList(int vFrom, int weight, int vTo); 
        //返回有向图的结点数 
        int n();
        //返回有向图的边数
        int e(); 
        //返回结点v的第一个相邻结点 
        int first(int v);
        //返回结点v在相邻结点w后的第一个邻结点 
        int next(int v, int w);
        //返回结点v1和v2之间的权重 
        int weight(int v1, int v2);
        //得到结点v是否被访问的标记
        int getMark(int v); 
        //设置结点是否被访问的标记 
        void setMark(int v, int val);
        //判断结点v1和v2间是否有边 
        bool isEdge(int v1, int v2);
        //存储有向图的路径 
        void setRoute(int v1, int v2, int val);
        //得到存储路径的矩阵中结点i与j之间的值
        int getRoute(int i, int j);
        //将字符串str转换为对应结点的整数 
        int ConvertInput(std::string str);
        //得到整数Node所对应的城市名称
        void CityName(int Node); 
        //进行一些防错机制的判断
        bool JudgeIsFalse(std::string str); 
  
    private:
        int m_vCount;
        int m_eCount
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值