POJ 3169 差分约束

本文介绍了一种利用差分约束解决系统中节点间路径问题的方法,并通过具体实例讲解了如何构建模型,处理节点间距离限制,最终使用SPFA算法求解最短路径。

题意:
这里写图片描述
这里写图片描述

好久没做差分约束了,,, 看到这道题第一想法是贪心…………………………

思路:
差分约束

  1. 从i到i+1的距离>=0 add(i+1,i,0)
  2. 对于互相讨厌的牛从u到v的距离>=d add(v,u,-d)
  3. 对于互相喜欢的牛从u到v的距离<=d add(u,v,d)

跑SPFA就好了

顺便判判dis 和入队次数

//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 25555
int n,ml,md,w[N],v[N],next[N],first[N],dis[N],vis[N],inq[N],tot,xx,yy,zz;
void add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
int spfa(){
    queue<int>q;q.push(1),dis[1]=0;
    while(!q.empty()){
        int t=q.front();q.pop();
        vis[t]++,inq[t]=0;
        if(vis[t]>n)return -1;
        for(int i=first[t];~i;i=next[i])
            if(dis[v[i]]>dis[t]+w[i]){
                dis[v[i]]=dis[t]+w[i];
                if(!inq[v[i]])inq[v[i]]=1,q.push(v[i]);
            }
    }
    return dis[n]>0x3ffffff?-2:dis[n];
}
int main(){
    memset(first,-1,sizeof(first)),memset(dis,0x3f,sizeof(dis));
    scanf("%d%d%d",&n,&ml,&md);
    for(int i=1;i<=ml;i++)scanf("%d%d%d",&xx,&yy,&zz),add(xx,yy,zz);
    for(int i=1;i<=md;i++)scanf("%d%d%d",&xx,&yy,&zz),add(yy,xx,-zz);
    for(int i=1;i<n;i++)add(i+1,i,0);
    printf("%d\n",spfa());
}

这里写图片描述

转载于:https://www.cnblogs.com/SiriusRen/p/6532197.html

内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值