poj 1062 昂贵的聘礼

本文探讨了在解决带有等级限制的最短路径问题时,如何正确应用Dijkstra算法而非Bellman-Ford算法。通过实例解析了算法实现细节,包括初始化、松弛操作以及如何在考虑等级限制的情况下找到最短路径。

其实这题是昨天做的,不过没来的及写Blog,还有通过这题想通了一些问题,所以想专门的抽个时间好好写写,嗯,今后要好好写Blog,利用这段时间好好整理一下自己的思路,这样也好。

这题的题意就不说了,汉语,没有什么理解上的问题,这题最大的障碍就是在怎样处理等级问题上。开始的时候,我尝试着用Bellman_ford,在松弛的时候加上等级的处理,但是我理解错了一句话,“地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。“这句话是说从源点开始扩展的所有点都必须在源点的等级限制范围内。而Bellman

_ford的松弛处理则并不能保证这一点。所以很不幸的WA了,然后看discuss里的人用Dijkstra做的,又想了一下,Dijkstra是从源点一层一层向前扩展,正好符合这题的特点,想明白了怎么做,但是对于代码实现还是花了一点时间,这个需要锻炼。

代码:

View Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
#define  N 104
#define  INF 10000000
using namespace std ;

struct node
{
    int cost , level ;
}p[N] ;

int map[N][N] , vist[N] , dis[N] , lev[N] ;//vist[i]标记这个点是否遍历过,dis[i]表示源点到
//点i的最短距离,lev[i]记录点i的等级
int n , w , m ;

void init()
{
    int i ;
    memset( vist , 0 , sizeof ( vist )) ;
    for ( i = 1 ; i <= n ; i++ )
    dis[i] = INF ;
    dis[1] = 0 ;
}

int Dijkstra()
{
    int min_lev , max_lev ;
    int ans = p[1].cost ;
    int i , j , k , pos ;

    for ( i = 0 ; i < m ; i++ )
    {
        //计算等级范围
        min_lev = lev[i] - w ;
        max_lev = lev[i] ;
        if ( p[1].level < min_lev || p[1].level > max_lev )
        continue ;
        init( );
        //dijkstra计算出这个等级范围内的最短路。
        for ( j = 1 ; j <= n ; j++ )
        {
            pos = -1 ;
            for ( k = 1 ; k <= n ; k++ )
            if ( !vist[k] && ( pos == -1 || dis[k] < dis[pos] ) && ( p[k].level >= min_lev && p[k].level <= max_lev ))
            pos = k ;
            vist[pos] = 1 ;
            for( k = 1 ; k <= n ; k++ )
            if ( !vist[k] && dis[k] > dis[pos] + map[pos][k] &&( p[k].level >= min_lev && p[k].level <= max_lev))
            dis[k] = dis[pos] + map[pos][k] ;
        }
        //加上最后那个物品的价值,找出最小值
        for ( j = 1 ; j <= n ; j++ )
        if ( dis[j] + p[j].cost < ans )
        ans = dis[j] + p[j].cost ;
    }
    return ans ;
}

int main()
{
    int i , j , x , y , t ;

    while ( scanf ( "%d%d" , &w , &n) != EOF )
    {
        for ( i = 1 ; i <= n ; i++ )
        for ( j = 1 ; j <= n ; j++ )
        map[i][j] = INF ;
        m = 0 ;
        for ( i = 1 ; i <= n ; i++ )
        {
            scanf ( "%d%d%d" , &p[i].cost , &p[i].level , &t );
            lev[m++] = p[i].level ;
            while ( t-- )
            {
                scanf ( "%d%d" , &x , &y ) ;
                map[i][x] = y ;
            }
        }
        printf ( "%d\n" , Dijkstra());
    }
    return 0 ;
}

 

 

转载于:https://www.cnblogs.com/misty1/archive/2012/10/16/2726814.html

01、数据简介 出口韧性是地级市在面对外部震荡和压力时,能够承受并迅速适应、应对变化的能力。这种能力体现在地级市经济结构的灵活性、创新能力和竞争力,以及地方政府的政策支持和产业调整能力等多个方面。 城市出口韧性对于城市的经济发展、就业稳定、国际贸易地位以及风险抵御能力等方面都具有重要影响。因此,城市应加强出口韧性的建设,提高应对外部冲击的能力,以推动其经济的可持续发展。 数据名称:地级市-城市出口韧性数据 数据年份:2011-2022年 02、相关数据 代码 年份 地区 城市 省份 城市出口韧性 距离港口的最近距离 最终进口额_百万人民币2 最终出口额_百万人民币2 人均道路面积2 年末金融机构各项贷款余额万元2 地区生产总值万元2 科学支出万元2 地方财政一般预算内支出万元2 城镇居民人均可支配收入元2 固定资产投资2 实际使用外商投资额百万美元2 城镇化率2 外贸依存度 出口贸易 年平均汇率 实际使用外商投资额百万人民币2 外资依存度 金融发展水平 财政投资力度 科学技术水平 出口偏离度 x_地区生产总值万元2 x_城镇化率2 x_人均道路面积2 x_外贸依存度 x_出口贸易 x_出口偏离度 x_金融发展水平 x_城镇居民人均可支配收入元2 x_财政投资力度 x_科学技术水平 x_距离港口的最近距离 x_外资依存度 地区生产总值万元2_sum y_地区生产总值万元2 城镇化率2_sum y_城镇化率2 人均道路面积2_sum y_人均道路面积2 外贸依存度_sum y_外贸依存度 出口贸易_sum y_出口贸易 出口偏离度_sum y_出口偏离度 金融发展水平_sum y_金融发展水平 城镇居民人均可支配收入元2_sum y_城镇居民人均可支配收入元2 财政投资力度_sum y_财政投资力度 科学技术水平_sum y_科学技术水平
内容概要:本文档详细介绍了一个基于Matlab实现的无人机空中通信仿真资源包,系统涵盖了无人机通信、三维路径规划、状态估计与多机协同等多个核心技术模块的仿真代码与案例研究。内容聚焦于无人机在复杂环境下的三维路径规划(如基于遗传算法GA、粒子群算法PSO、动态窗口法DWA等)、无人机姿态与轨迹的状态估计算法(如扩展卡尔曼滤波器EKF、UKF、不变扩展卡尔曼滤波IEKF、粒子滤波PF等),以及无人机通信链路建模与优化,并融合智能优化算法对系统性能进行提升。此外,资源包还拓展至微电网优化、MIMO检测、图像融合、信号处理等相关科研领域,构建了一个以无人机技术为核心、多学科交叉融合的综合性仿真研究体系。; 适合人群:具备一定Matlab编程能力与控制系统基础知识,从事无人机系统设计、无线通信、自动化控制、智能优化算法或相关领域研究的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①开展无人机通信系统建模与性能仿真分析;②实现复杂动态环境中无人机三维路径规划与实时避障;③研究基于多源传感器融合的无人机导航与状态估计方法;④结合智能优化算法提升无人机任务执行效率与系统鲁棒性; 阅读建议:建议读者依据资源包提供的模块化结构系统学习,优先掌握Matlab/Simulink基本仿真技能,重点研读路径规划与状态估计部分的算法实现与代码细节,并通过实际调试与二次开发加深对无人机系统集成与优化策略的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值