加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Graph.h 2.24 KB
一键复制 编辑 原始数据 按行查看 历史
章宏亮 提交于 2024-05-07 00:25 . 清空仓库后首次提交
#pragma once
#include "Edge.h"
#include "station.h"
#include <vector>
class Dist //类Dist,Dijkstra算法用来保存最短路径信息
{
public:
int index; //站点编号
int length; //当前最短路径长度
int pre; //路径最后经过的站点编号
Dist() {
index = 0;
length = 0;
pre = 0;
};
~Dist() {};
bool operator < (const Dist& arg)const {
return (length < arg.length);
}
bool operator == (const Dist& arg) const {
return (length == arg.length);
}
bool operator > (const Dist& arg) const {
return (length > arg.length);
}
bool operator <=(const Dist& arg) const {
return (length <= arg.length);
}
bool operator >= (const Dist& arg) const {
return (length >= arg.length);
}
};
class Graph {
private:
int numStation; //站点数目
int numEdge; //边的数目,两个站点之间只有一条边Edge,但是有两个间距interval
int* Mark; //标记站点是否被访问过
std::vector<Station> stationList; //存储所有站点的表,每个元素都是一个站点(内含边表)
public:
Graph();
~Graph();
Edge FirstEdge(int station); //返回依附于站点station的第一条边
Edge NextEdge(Edge preEdge); //返回与preEdge有相同顶点的下一条边,若下一条边不存在,则返回一条to和weight都为-1的边
int getStationNO(std::string name); //根据名称获取站点编号
std::string getStationName(int NO); //根据编号获取站点名称
bool isEdge(Edge e);
bool isTrans(int front, int middle, int behind); //根据三个站点,判断是否换乘
void Dijkstra(int s, Dist*& D); //Dijkstra算法
void Dijk_minTrans(int s, Dist*& D); //Dijkstra算法实现最少换乘方案
std::string minRoute(int source, int target);
std::string minTranRoute(int source, int target);
int minLength(int source, int target); //返回最短路径长度,单位:米
int minTranNum(int source, int target); //返回最少换乘方案长度
int TranNum(int source,int target,Dist*& D); //只根据顶点,返回该路径的换乘次数
int Length(int source, int target, Dist*& D); //只根据顶点,返回该路径的路程长度
//std::string Route(int source, int target, Dist*& D);//只根据顶点,返回该路径
Edge* Route(int source, int target, Dist*& D); //返回路径的边集
int getEdgeNum(int source, int target, Dist*& D); //获取路径边集的数量
void resetMark(); //重置Mark为UNVISITED
//void setEdge(int from, int to, int weight); //设置一条边
//void delEdge(int from, int to); //删除一条边
};
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化