打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Dijkstra 最短路径
// Dijkstra.cpp : Defines the entry point for the console application.
// 最短路径

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 120
#define MaxInt 0x3f3f3f3f
int n,m;
int map[N][N], visited[N],low[N];

void Dijkstra()
{
int pos = 1, i , j ,min;
memset(visited, 0, sizeof(visited));
for(i = 1; i<=n ;i++)
low[i] = map[pos][i];

visited[1] = 1;
for(i = 1;i < n; i++)
{
min = MaxInt;
for(j = 1;j<=n;j++)
 if(visited[j] == 0 && min > low[j])
 {
 min = low[j];pos = j;
 }
 visited[pos] = 1;
 for(j = 1;j <= n;j++)
 if(visited[j] == 0 && low[j] > low[pos]+map[pos][j])
 low[j] = low[pos]+map[pos][j];
}
for( int k = 1; k<=n ;k++)
printf("%d\n",low[k]);
}

int _tmain(int argc, _TCHAR* argv[])
{
int i,j;
char v[50];
while(scanf("%d", &n)!=EOF)
{
memset(map,MaxInt,sizeof(map));
for(i = 1; i <= n; i++)
map[i][i] = 0;
//m = n*(n-1)/2;
for(i = 2; i <=n;i++)
for(j = 1;j < i;j++)
{
scanf("%s", &v);
if(strcmp(v, "x")!=0)
map[i][j] = map[j][i]=atoi(v);
}
printf("before Dijkstra:\n");
Dijkstra();
printf("after Dijkstra:\n\n");
}
return 0;
}



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c语言经典游戏代码
最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
用Dijkstra算法输出最短路径以及对应的最小权值
算法|三重循环与Floyd(弗洛伊德)多源最短路径算法
最短路径问题
有向图转换&遍历&拓扑&最短路径
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服