当前位置: 首页 > news >正文

弗洛伊德算法

public class MultiConditionFloyd { // 定义最大安全值(避免溢出) static final int INF = 0x3f3f3f3f; // n个节点 int n; // ========== 多条件DP数组 ========== // 第一维:最优值(如最短距离) long[][] dist; // 第二维:次优条件(如最小费用、最少边数等) long[][] cost; // 或 int[][] edgeCount; // 第三维:路径计数(最优路径有多少条) long[][] count; // 路径记录(可选) int[][] next; // 用于路径还原 public MultiConditionFloyd(int n) { this.n = n; dist = new long[n][n]; cost = new long[n][n]; count = new long[n][n]; next = new int[n][n]; // 初始化 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { dist[i][j] = (i == j) ? 0 : INF; cost[i][j] = (i == j) ? 0 : INF; count[i][j] = (i == j) ? 1 : 0; // 自身到自身算1条路径 next[i][j] = j; } } } // 添加边(根据题目要求处理重边) public void addEdge(int u, int v, long d, long c) { // 如果距离相同,取更优的次条件 if (d < dist[u][v]) { dist[u][v] = d; cost[u][v] = c; count[u][v] = 1; } else if (d == dist[u][v]) { // 距离相同,比较第二条件 if (c < cost[u][v]) { cost[u][v] = c; count[u][v] = 1; } else if (c == cost[u][v]) { // 两个条件都相同,路径数累加 count[u][v]++; } } } // 核心:多条件弗洛伊德 public void run() { for (int k = 0; k < n; k++) {//k在最外面 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (dist[i][k] == INF || dist[k][j] == INF) continue; long newDist = dist[i][k] + dist[k][j]; long newCost = cost[i][k] + cost[k][j]; // ========== 多条件比较逻辑 ========== if (newDist < dist[i][j]) { // 找到更短路径,全面更新 dist[i][j] = newDist; cost[i][j] = newCost; count[i][j] = count[i][k] * count[k][j]; // 乘法原理 next[i][j] = next[i][k]; } else if (newDist == dist[i][j]) { // 距离相等,进入第二条件比较 if (newCost < cost[i][j]) { // 距离相同但费用更少 cost[i][j] = newCost; count[i][j] = count[i][k] * count[k][j]; next[i][j] = next[i][k]; } else if (newCost == cost[i][j]) { // 两个条件都相同,累加路径数 count[i][j] += count[i][k] * count[k][j]; // 注意:可能需要取模 count[i][j] %= MOD; } } } } } } // 获取路径(利用next数组) public List<Integer> getPath(int start, int end) { List<Integer> path = new ArrayList<>(); if (dist[start][end] == INF) return path; int cur = start; path.add(cur); while (cur != end) { cur = next[cur][end]; path.add(cur); } return path; } }
http://www.jsqmd.com/news/654079/

相关文章:

  • 【收藏级】2026 AI大模型学习指南|小白程序员入门到就业全攻略,抓住行业红利
  • DeOldify图像上色服务技术解析:从LSTM到现代神经网络的颜色预测
  • 收藏!3个方法解决RAG答非所问,提升大模型准确率
  • PLB-TV 纯净 4K 影视:无广告流畅播放体验
  • 2026年氯化钙怎么选?实测避坑指南与品牌挑选真相
  • ​九科信息:以企业级AI Agent重塑企业数智化生产力
  • 2026耐候钢结构防火涂料厂家推荐 廊坊美鑫防火材料有限公司领衔(产能+专利+质量三重保障) - 爱采购寻源宝典
  • HunyuanVideo-Foley未来展望:多模态输入与交互式音效生成的探索
  • Lingyuxiu MXJ LoRA效果实测:同一Prompt下5个LoRA版本风格对比图集
  • Hermes Agent 部署 UI + 本地模型 Gemma 4,对接微信(完全免费,无需 Tokens)
  • 想监控局域网?教你五个实用的局域网监控方法,快码住了
  • 【企业级Prompt治理框架】:如何在3天内搭建可审计、可迭代、可量化的提示词管理体系?
  • 2026高安全性危险品库房厂家推荐 廊坊荣特建材领衔(产能+专利+环保三重认证) - 爱采购寻源宝典
  • 2026便携式总氮测定仪厂家推荐排行榜江苏盛奥华领衔(产能+专利+服务三重权威认证) - 爱采购寻源宝典
  • 单片机【指定数组地址】跳转表写法
  • 4.15学习日志
  • 生成式AI应用数据回流机制:从原始日志到高质量微调数据的7步工业化流水线(附GDPR/《生成式AI服务管理暂行办法》双合规checklist)
  • 2026智能快速bod分析仪厂家推荐排行榜江苏盛奥华环保科技领衔(产能+专利+服务三重认证) - 爱采购寻源宝典
  • 多进程multiprocessing加速程序的运行
  • 2026艺术装饰混凝土厂家推荐排行榜从产能到质量,廊坊美鑫防火材料有限公司领跑行业 - 爱采购寻源宝典
  • 2026智能联网检测仪厂家推荐 江苏盛奥华环保科技领衔(产能/专利/质量三重认证) - 爱采购寻源宝典
  • 2026创新节能型自动化控制系统厂家推荐 珀克利电气科技产能与专利双领先 - 爱采购寻源宝典
  • SenseVoiceSmall实战分享:多语言会议录音的情感与事件分析
  • 5分钟快速上手OBS智能背景移除插件:免费实现专业虚拟背景的完整指南
  • Nanbeige4.1-3B部署案例:国产A10/A800显卡适配经验——CUDA 11.8+torch2.0实测
  • STM32 实现差分编码器高精度数据采集与倍频技术详解
  • Qwen3-14B镜像空间优化:精简日志+清理缓存+压缩模型权重技巧
  • 2026年靠谱的南京广告摄影/南京商业摄影/南京工业摄影/南京企业宣传摄影靠谱公司推荐 - 品牌宣传支持者
  • Figma设计数据双向转换:如何实现设计文件与JSON格式的高效互转
  • GLM-4.7-Flash完整使用指南:部署、调用、调优一站式解决,小白友好