繁体   English   中英

找到有向图的中心

[英]Find Center of Directed Graph

我正在尝试使用 JavaScript 构建有向图,其中有 N + 1 个顶点(点)(编号从 0 到 N)和它们之间的 N 个有向边。 图网络是连通的; 也就是说,忽略边的方向,每对顶点之间都有一个链接。

我需要找到可以从图形上的所有顶点到达的中心顶点,或者确定它不存在。 顶点由 N 个整数的两个 arrays A 和 B 描述。 对于每个 integer K (0 <= K < N),从顶点 A[K] 到顶点 B[K] 存在一条边。

function 将采用以下格式:

function solution(A, B);

也就是说,给定两个 arrays A 和 B,返回作为中心的顶点的编号(可以从所有其他顶点到达的顶点)。 如果不存在这样的顶点,则 function 应返回 -1。

给定 A = [1,2,3] 和 B = [0,0,0],function 应返回 0。图中中心的数字为 0。

在此处输入图像描述

给定 A = [0,1,2,4,5] 和 B = [2,3,3,3,2],function 应该返回 3。图中的中心是数字 3。 从点 1,2 和 4 直接连接到点 3。从点 0 和 5,边缘通过点 2 到点 3 go。

在此处输入图像描述

给定 A = [2,3,3,4] 和 B = [1,1,0,0],function 应该返回 -1。 图上没有中心。 在此处输入图像描述

中心顶点的出度必须为 0 我觉得这句话需要一些数学证明,所以在这里:

假设顶点c是中心。 假设从c到另一个顶点d有一条边。 给定中心的定义,必须有一条从dc的路径,因此必须有一个环,并且具有N + 1个顶点和N条边的连通图是一棵树的教科书定义,它不包含环,所以这种以c为原点的边不能存在。

显然,所有其他顶点的出度必须大于 0(因为它们必须以某种方式到达c )。

知道了这一点,您可以解决O(n)中的问题。

只需搜索出度为 0 的单个顶点。如果它不存在或者您找到多个,则没有答案,否则答案是您找到的唯一值。

一个可能的解决方案是:

function solution(A, B){
    var set = new Set();
    for(var i = 0; i <= N; i++) set.add(i);
    for(var i = 0; i < A.length; i++) set.delete(A[i]);
    if(set.size != 1) console.log("There is no answer");
    else console.log("The answer is " + set.values().next().value);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM