任意两节点之间最短距离
来源:互联网 发布:崔成国 知乎 编辑:程序博客网 时间:2024/05/29 16:31
思路就是:
找到这两个节点的最近公共父节点,然后重根遍历 计算到父节点的距离 两个点的距离-2*父节点的距离 就是所求的了
TarJan
package com.graph;import java.util.Scanner;import java.util.Vector;/* * * * Tarjan 算法实现最近公共父节点 */public class LCA {private static int [][]Gra = new int[100][100];private static int [][]res = new int[100][3];private static int []fa = new int[100];private static int []vis = new int[100];private static int []dis = new int[100];private static Vector<Integer> []query = new Vector[100];public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();for(int i = 1;i<=n;i++){int u = in.nextInt();int v = in.nextInt();int d = in.nextInt();Gra[u][v] = d;Gra[v][u] = d;}for(int i = 0;i<100;i++){query[i] = new Vector<Integer>();}for(int i = 1;i<=m;i++){int u = in.nextInt();int v = in.nextInt();query[u].add(v);query[v].add(u);res[i][0] = u;res[i][1] = v;}dis[1] = 0;Tarjan(1);for(int i = 1;i<2;i++){System.out.println(dis[res[i][0]]+dis[res[i][1]]-2*dis[res[i][2]]);}}private static void Tarjan(int u) {vis[u] = 1;fa[u] = u;for(int i = 0;i<query[u].size();i++){if(vis[query[u].get(i)]==1){for(int j = 1;j<=5;j++)if(res[j][0]==u&&res[j][1]==query[u].get(i) || res[j][0]==query[u].get(i)&&res[j][1]==u){res[j][2] =find(query[u].get(i));break;}}}for(int i = 1;i<=5;i++){if(Gra[u][i]>0)if(vis[i]==0){dis[i] = dis[u]+Gra[u][i];Tarjan(i);fa[i] = u;}}}private static int find(Integer x) {// TODO Auto-generated method stubif(x!=fa[x])fa[x] =find(fa[x]);return fa[x];}}
0 0
- 任意两节点之间最短距离
- 两数组最短距离
- 两数组最短距离
- 两数组最短距离
- 两数组最短距离
- 两数组最短距离
- 两数组最短距离
- 两数组最短距离
- 两数组最短距离
- 我对弗洛伊德算法的理解(求图中任意两点之间最短距离)
- 两数组最短距离 acm
- 两数组最短距离 acm
- acm--两数组最短距离
- SDUT 两数组最短距离
- 1075: 两数组最短距离
- 1208 -- 两数组最短距离
- HDOJ 1869 六度分离 两两之间最短距离的最大值
- 字符串之间的最短距离
- Windows平台Ring3下DLL注入(HOOK)方法整理汇总
- UVa 123 - Searching Quickly
- oracle恢复删除的数据
- poj 2255 二叉树遍历(前中求后)
- 【IndiaHacks 2016 - Online Edition (Div 1 + Div 2) ErrichtoD】【二分答案 最大流】Delivery Bears x只熊运输同样的实物重量货物
- 任意两节点之间最短距离
- 1. Two Sum【E】【59+25】【leetcode】
- 利用遗传算法求解车辆路径问题
- 最火的Android开源项目整理
- Java随机数
- JAVA通过TCP编程模拟telnet程序
- 【笔记】《C#大学教程》- 第12章 GUI(二)
- Traditional courses and MOOC discussion
- OpenSSL命令---genrsa