PTA—旅游规划

        题目大意:有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。

        分析:这是一道要用迪杰斯特拉算法解决的最短路问题。用两个二维数组存储长度和费用,两个一维数组存储最小的长度和费用。

        两种情况下要进行一维数组的更新。第一.当从当前节点q到节点j的距离小于原先的到节点j的最小距离,那么对于lowdis[j]和lowmoney[j]进行更新。第二.从当前节点q到节点j的距离等于原先的到节点j的最小距离,但从当前节点q到节点j所花费的钱要少于原先到节点j的钱,则对上述两个二维数组进行更新。

        注意:初始的两个二维数组需要初始化为一个很大的值,也就是INF。

代码如下:

#include<bits/stdc++.h>
using namespace std;

const int M = 1000;
const int INF = 0x3f3f3f3f;
int n, m, s, d;
int mp1[M][M], mp2[M][M], lowdis[M], lowmoney[M]; //mp1存储长度  mp2存储费用
bool vis[M] = {false};
void Dijkstra()
{
    vis[s] = true;
    for(int i = 0; i < n; i++)
    {
        lowdis[i] = mp1[s][i];
        lowmoney[i] = mp2[s][i];
    }//lowdis和lowmoney两个数组初始化为从点s出发到其余点的距离和费用
    for(int i = 0; i < n - 1; i++)
    {
        int min_n = INF, q = -1;
        for(int j = 0; j < n; j++)
        {
            if(!vis[j] && lowdis[j] < min_n)
            {
                min_n = lowdis[j];
                q = j;
            }
        }//找到从当前点到其余点的距离中的最小值
        vis[q] = true;//更新状态
        for(int j = 0; j < n; j++)
        {
            if(mp1[q][j] < INF)//寻找从q点出发的距离最短的点
            {
                if(lowdis[q] + mp1[q][j] < lowdis[j])
                {
                    lowdis[j] = lowdis[q] + mp1[q][j];
                    lowmoney[j] = lowmoney[q] + mp2[q][j];
                }
                else if(lowdis[q] + mp1[q][j] == lowdis[j])
                {
                    if(lowmoney[q] + mp2[q][j] < lowmoney[j])
                    {
                        lowdis[j] = lowdis[q] + mp1[q][j];
                        lowmoney[j] = lowmoney[q] + mp2[q][j];
                    }
                }
            }
        }
    }
}

int main()
{
    cin >> n >> m >> s >> d;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            if(i == j)
                mp1[i][j] = mp2[i][j] = 0;
            else
                mp1[i][j] = mp2[i][j] = INF;
        }
    }
    for(int i = 1; i <= m; i++)
    {
        int a, b, c, f;
        cin >> a >> b >> c >> f;
        mp1[a][b] = mp1[b][a] = c;
        mp2[a][b] = mp2[b][a] = f;
    }
    Dijkstra();
    cout << lowdis[d] << " " << lowmoney[d] << endl;
    return 0;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
EDAW旅游规划是根据EDAW(Environmental Design + Analysis Workshop)公司的专业知识和经验,为客户提供全方位的旅游规划服务。EDAW是一家国际性的设计和规划咨询公司,致力于城市和环境设计领域。 EDAW旅游规划的目标是为客户提供一流的旅游体验和可持续发展的旅游目的地。在规划过程中,EDAW会综合考虑目的地的资源、环境、社会经济和文化等方面的因素,以确保规划的可行性和可持续性。 首先,EDAW会对目的地的自然和文化资源进行全面评估和分析,了解其独特之处和发展潜力。然后,根据市场需求和客户的要求,制定旅游发展策略和规划框架。在规划过程中,EDAW会注重保护和提升目的地的自然环境,并尽量减少负面影响。 接下来,EDAW会进行市场调研和定位分析,确定目标客户群体和市场定位。根据市场需求,制定针对不同客户群体的旅游产品和服务策略,以提供个性化的旅游体验。 此外,EDAW还会考虑目的地的交通、酒店、餐饮等基础设施建设和改善,以提升旅游服务的质量和效率。同时,也会加强目的地的宣传推广,吸引更多的游客和投资者。 最后,EDAW还会制定监测和评估机制,以跟踪旅游规划的实施效果,并根据需要进行调整和改进。 总而言之,EDAW旅游规划是一个综合性的过程,旨在为客户提供可持续发展的旅游目的地,创造卓越的旅游体验。通过综合考虑资源、环境、经济和文化等因素,EDAW可为客户提供有效的旅游规划解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值