algorithm - Djikstra-like算法的优化
问题描述
我尝试设计一个简单的算法来使用类似 Dijkstra 的算法访问图,但是当图非常大(超过 75000 个节点)时,它似乎没有优化。
这是我的代码
class lamp {
int id;
bool visited = false;
list<lamp*> connected;
int distance = INT_MAX;
public:
void setVisited() {
visited = true;
}
bool isVisited() {
return visited;
}
void addCOnnected(lamp* l) {
connected.push_back(l);
}
list<lamp*> getConnected() {
return connected;
}
void resetVisited() {
visited = false;
}
void setId(int i) {
id = i;
}
void setDistance(int d) {
distance = distance < d ? distance : d;
}
int getDistance() {
return distance;
}
};
void resetVisited(lamp* l, int n) {
for (int i = 0; i < n; i++) {
l[i].resetVisited();
}
}
void evaluateDistance(lamp& l) {
queue<lamp*> lampQueue;
lampQueue.push(&l);
l.setDistance(1);
while (lampQueue.size() > 0) {
lamp* current = lampQueue.front();
lampQueue.pop();
int currentDistance = current->getDistance();
for (lamp* conn : current->getConnected()) {
if (!(conn->isVisited())) {
lampQueue.push(conn);
conn->setVisited();
conn->setDistance(currentDistance + 1);
}
}
};
}
奇怪的 setDistance 是因为从不同的灯开始对任何灯的距离进行多次评估,并且在每个循环中保留最低的距离。
解决方案
推荐阅读
- command-line - 在控制台上输出 liquibase
- sql - 查询 SQL 查询时出现 Python 错误(字符串格式化期间并非所有参数都转换)
- c# - Deedle Frame的计算性能明显慢于Series?
- .net - 如何使用 C# iText7 在 PDF 生成中创建页眉
- wordpress - 如何在更改自定义帖子类型 slug 后使用 .htaccess 进行 301 重定向
- java - 如何以多线程方式提高使用 OrientDB 的性能?
- mysql - Mysql group_concat 与 in() 函数
- python - BeautifulSoup 查找 - 从感兴趣的块中排除嵌套标签
- jquery - 使用最后一次单击仅显示一个弹出窗口
- windows - 使用智能卡或生物识别设备通过 Active Directory 进行身份验证