文章
226
粉丝
165
获赞
364
访问
108.8k
#include <iostream>
#include <iomanip>
using namespace std;
const int MAXN = 1005;
double graph[MAXN][MAXN];
double dist[MAXN];
bool visited[MAXN];
void dijkstra(int start, int n) {
// 初始化距离数组和访问标记数组
for (int i = 1; i <= n; ++i) {
dist[i] = 0.0;
visited[i] = false;
}
dist[start] = 1.0; // 起点到自身的安全系数为1
for (int i = 0; i < n; ++i) {
// 找到未被访问的节点中安全系数最大的节点
int u = -1;
double max_dist = 0.0;
for (int j = 1; j <= n; ++j) {
if (!visited[j] && dist[j] > max_dist) {
max_dist = dist[j];
u = j;
}
}
if (u == -1) break; // 没有可访问的节点,提前退出
visited[u] = true;
// 松弛所有邻接边
for (int v = 1; v <= n; ++v) {
if (graph[u][v] > 0 && !visited[v] && dist[v] < dist[u] * graph[u][v]) {
dist[v] = dist[u] * graph[u][v];
...
登录后发布评论
暂无评论,来抢沙发