热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

最小树形图模板朱刘算法分享

这篇文章主要介绍了最小树形图模板朱刘算法,有需要的朋友可以参考一下

代码如下:

/*
最小树形图图模版-朱刘算法
模版说明:点标号必须0-(N-1)
   必须去除到自身的点(到自身的边的边权赋无限大)
*/
#define M 109
#define type int
const type inf=(1)<<30;
struct Node{
 int u , v;
 type cost;
}E[M*M+5];
int pre[M],ID[M],vis[M];
type In[M];
int n,m;
type Directed_MST(int root,int NV,int NE) {
 type ret = 0;
 while(true) {
  //1.找最小入边
  for(int i=0;i  for(int i=0;i   int u = E[i].u;
   int v = E[i].v;
   if(E[i].cost     pre[v] = u;
    In[v] = E[i].cost;
   }
  }
  for(int i=0;i   if(i == root) continue;
   if(In[i] == inf) return -1;//除了跟以外有点没有入边,则根无法到达它
  }
  //2.找环
  int cntnode = 0;
 memset(ID,-1,sizeof(ID));
 memset(vis,-1,sizeof(vis));
  In[root] = 0;
  for(int i=0;i   ret += In[i];
   int v = i;
   while(vis[v] != i && ID[v] == -1 && v != root) {
    vis[v] = i;
    v = pre[v];
   }
   if(v != root && ID[v] == -1) {
    for(int u = pre[v] ; u != v ; u = pre[u]) {
     ID[u] = cntnode;
    }
    ID[v] = cntnode ++;
   }
  }
  if(cntnode == 0) break;//无环
  for(int i=0;i   ID[i] = cntnode ++;
  }
  //3.缩点,重新标记
  for(int i=0;i   int v = E[i].v;
   E[i].u = ID[E[i].u];
   E[i].v = ID[E[i].v];
   if(E[i].u != E[i].v) {
    E[i].cost -= In[v];
   }
  }
  NV = cntnode;
  root = ID[root];
 }
 return ret;
}


推荐阅读
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了 Python 列表切片的基本概念和实际应用,通过具体示例展示了不同切片方式的使用方法及其背后的逻辑。 ... [详细]
  • 本文详细介绍了K-Medoids聚类算法,这是一种基于划分的聚类方法,适用于处理大规模数据集。文章探讨了其优点、缺点以及具体实现步骤,并通过实例进行说明。 ... [详细]
  • 本文探讨如何利用人工智能算法自动区分网页是详情页还是列表页,介绍具体的实现思路和技术细节。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • MATLAB实现n条线段交点计算
    本文介绍了一种通过逐对比较线段来求解交点的简单算法。此外,还提到了一种基于排序的方法,但该方法较为复杂,尚未完全理解。文中详细描述了如何根据线段端点求交点,并判断交点是否在线段上。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 解决Windows 10无法正确加载ICA文件的问题:设置Citrix Receiver为默认打开程序
    当在Windows 10系统中遇到无法正确加载ICA文件的情况时,可以通过下载并安装Citrix Receiver,并将其设置为ICA文件的默认打开方式来解决问题。具体操作步骤包括找到ICA文件,选择合适的打开程序路径(通常是C:\Program Files (x86)\Citrix\ICA Client\wfcrun32.exe),并确保该程序被设为始终使用。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 获取计算机硬盘序列号的方法与实现
    本文介绍了如何通过编程方法获取计算机硬盘的唯一标识符(序列号),并提供了详细的代码示例和解释。此外,还涵盖了如何使用这些信息进行身份验证或注册保护。 ... [详细]
author-avatar
吉祥话如意
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有