1 Star 0 Fork 0

jiangmiao/jiangm2022

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Dijistra.cpp 1.08 KB
一键复制 编辑 原始数据 按行查看 历史
Your Name 提交于 2022-11-09 10:01 . 加入数据结构代码
#include "Dijistra.h"
unordered_map<Node*, int> Dijistra::dijistra(Graph graph, Node* node) {
unordered_map<Node*, int> dist;
unordered_set<Node*> markednode;
dist[node] = 0;
markednode.insert(node);
//有哪些点可以直接到达node节点,更新dist
for (auto edge:node->edges) {
Node* to = edge->to;
dist[to] = edge->weight;
}
//循环n-1次
int n = graph.nodes.size();
n--;
while (n) {
int mindist = INT_MAX;
Node* minnode;
for (auto nodepair : dist) {
//如果这个节点没有被标记过
if (markednode.find(nodepair.first)==markednode.end()&&nodepair.second<mindist) {
mindist = nodepair.second;
minnode = nodepair.first;
}
}
//找到最小距离的节点标记一下
markednode.insert(minnode);
//更新dist,那些节点能通过minnode到达node
for (auto edge : minnode->edges) {
Node* tmp = edge->to;
if (markednode.find(tmp)==markednode.end()) {
int distance = mindist + edge->weight;
if (dist.find(tmp) == dist.end()) {
dist[tmp] = distance;
}
else {
if (dist[tmp] > distance) {
dist[tmp] = distance;
}
}
}
}
n--;
}
return dist;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gingerj/jiangm2022.git
[email protected]:gingerj/jiangm2022.git
gingerj
jiangm2022
jiangm2022
master

搜索帮助