java - 具有邻接矩阵的未加权图上的最长路径
问题描述
我首先查看了其他问题,并没有找到任何正确的答案。假设有一个二维数组,其中保存了两个节点,并且输入一个整数,其中包含所有节点的总数。现在的任务是在 Java 中找到有向无环图中的最长路径。
我首先有运行 Bfs 的想法,例如:
long longestPath(long length, long Array[][])
{
int[] max = new int;
if( !visited(V)
{dfs(v); maximum[] = max[dfs.distance};}
}
那时我停在这里,因为我认为 dfs 只适用于树。然后我有了使用拓扑排序的想法。我确实不知道如何用二维数组来实现它。有人有想法吗?
解决方案
是的,你必须做拓扑排序。DAG中的最长路径可以通过巧妙的变换来找到,即使用当前边权重的负值。在新转换的图中,您可以找到最短路径。而这个值的负数就是最长的路径。
为了在 DAG 中找到最短路径,您首先进行顶级排序,然后按该顺序更新
// do this for all the valid adjacent edges according to your matrix
// u is the current vertex you are processing in the topological order
if(cost[u] + w < cost[v]) // assume the edge is from u to v
{
cost[v] = cost[u] + w;
}
推荐阅读
- angular - 通过 UI 对模型的更改不会反映在反应式表单的表单值中
- oracle - 如何从第三张表中的两个不同表中制作外键?
- c++ - 在 constexpr 上下文中使用 std::vector 周围的平面集包装器
- ios - 为什么我的 Firebase 项目云消息传递 iOS 配置部分为空白?
- perl - Perl 剪切字符串的精确部分并存储第一个分隔符
- javascript - React 本机项目不运行 Android
- python - 具有模型拟合的 TensorFlow 错误的 IMDB 数据库的 RNN
- ssl - 从 .NET 5 中的 ServicePointManager.SecurityProtocol 解析密码套件
- php - 获取 PHP DOM-XML 的最后一个孩子的文本值需要很长时间
- android - 如何在没有 otp 代码的情况下登录现有的 firebase 用户?