最短路径问题java应用程序_最短路径问题

#include

#include

#define NODE 1001

#define INT_MAX 100000000

struct city

{

int len, cost;

};

struct city map[NODE][NODE];

struct city dis[NODE];

int flag[NODE];

void Dijkstra(int src, int n);

int main()

{

int n, m, s, t, i, j, u, v, len, cost;

while (scanf("%d%d", &n, &m) != EOF) {

// 终止条件

if (n == 0 && m == 0) {

break;

}

// 初始化图的邻接矩阵

for (i = 0; i < n; i ++) {

for (j = i; j < n; j ++) {

map[i][j].len = map[j][i].len = INT_MAX;

map[i][j].cost = map[j][i].cost = 0;

}

}

// 接受图的边数据

while (m --) {

scanf("%d%d%d%d", &u, &v, &len, &cost);

map[u - 1][v - 1].len = map[v - 1][u - 1].len = len;

map[u - 1][v - 1].cost = map[v - 1][u - 1].cost = cost;

}

// 接收起点和终点

scanf("%d%d", &s, &t);

// Dijkstra求单源最短路径

Dijkstra(s - 1, n);

// 打印输出

printf("%d %d\n", dis[t - 1].len, dis[t - 1].cost);

}

return 0;

}

void Dijkstra(int src, int n)

{

int i, j, k, min, temp;

for (i = 0; i < n; i ++) {

dis[i].len = map[src][i].len;

dis[i].cost = map[src][i].cost;

flag[i] = 0;

}

dis[src].len = dis[src].cost = 0;

flag[i] = 1;

for (i = 1; i < n; i ++) {

min = INT_MAX;

k = src;

for (j = 0; j < n; j ++) {

if (flag[j] == 0 && dis[j].len < min) {

k = j;

min = dis[j].len;

}

}

flag[k] = 1;

for (j = 0; j < n; j ++) {

temp = dis[k].len + map[k][j].len;

if (temp < dis[j].len && flag[j] == 0) {

dis[j].len = temp;

dis[j].cost = dis[k].cost + map[k][j].cost;

}

}

}

}

/**************************************************************

Problem: 1008

User: wangzhengyi

Language: C

Result: Accepted

Time:40 ms

Memory:8748 kb

****************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值