前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【(图) 旅游规划 (25 分)】【Dijkstra算法】

【(图) 旅游规划 (25 分)】【Dijkstra算法】

作者头像
_DIY
发布2019-09-29 15:37:05
2790
发布2019-09-29 15:37:05
举报
代码语言:javascript
复制
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 500;
const int INF = 0x3f3f3f3f;
struct Road
{
    int _len;
    int _cost;
}road[maxn][maxn];
int vis[maxn];
struct City
{
    int _len;
    int _cost;
}d[maxn];
int N, M, S, D;
void init()
{
    for(int i = 0; i < N; i++)
        for(int j = 0; j < N; j++)
            road[i][j]._len = INF, road[i][j]._cost = INF;
    for(int i = 0; i < N; i++)
        d[i]._len = INF, d[i]._cost = INF;
    d[S]._len = 0;
    d[S]._cost = 0;
}
void solve()
{
    memset(vis, 0, sizeof(vis));
    for(int i = 1; i <= N; i++)
    {
        int x, minlen = INF;
        for(int j = 0; j < N; j++)
        {
            if(!vis[j] && d[j]._len < minlen)
            {
                minlen = d[j]._len;
                x = j;
            }
        }
        vis[x]  = 1;
        if(minlen == INF)
            break;
        for(int y = 0; y < N; y++)
        {
            if(!vis[y])
            {
                if(d[y]._len > d[x]._len + road[x][y]._len)
                {
                    d[y]._len = d[x]._len + road[x][y]._len;
                    d[y]._cost = d[x]._cost + road[x][y]._cost;
                }
                else if(d[y]._len == d[x]._len + road[x][y]._len)
                    d[y]._cost = min(d[y]._cost, d[x]._cost + road[x][y]._cost);
            }
        }
    }
}
int main()
{
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    scanf("%d %d %d %d", &N, &M, &S, &D);
    init();
    int a, b, c, dd;
    for(int i = 0; i < M; i++)
    {
        scanf("%d %d %d %d", &a, &b, &c, &dd);
        road[a][b]._len = road[b][a]._len = c;
        road[a][b]._cost = road[b][a]._cost = dd;
    }
    solve();
    printf("%d %d\n", d[D]._len, d[D]._cost);
} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档