本篇博客是上一篇博客: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