Erlang中是否有可用的模块来查找无向图的所有周期?

问题描述

对于有向图,我们具有以下模块:

digraph_utils:cyclic_strong_components(G)

Erlang中的无向图有这样的东西吗?我想在无向图中找到所有循环。

有没有一种方法可以代替无向图使用有向图实用程序?直接使用这些模块会更加方便和容易。

我尝试了以下方法:

我尝试了相同的有向图模块,添加了双向边缘,因此该图现在是无向的。然后,我添加了一种情况,即周期长度大于3,然后打印这样的周期。对于我使用代码的图形,它工作正常。代码如下:(将我的代码添加到此答案的代码中:Finding a cycle or loop after digraph_utils:is_acyclic/1 returns false


-module(test1).
-export([get_cycles/0,pri/2,get_more_cycles/3]).

pri(L,0) ->
    io:fwrite("~n");

pri(L,V) ->
    List = lists:nth(V,L),case (length(List) > 3) of
        true -> io:fwrite("Cycle is ~w ~n",[List]);
        false -> io:fwrite("~n")
    end,pri(L,V-1).

get_cycles() ->
    G = digraph:new(),Vertices = [1,2,3,4,5,6,7,8,9,10,11,12,13],lists:foreach(fun(V) -> digraph:add_vertex(G,V) end,Vertices),Edges = [{12,13},{13,12},{11,{12,11},{10,10},{9,5},{5,9},6},{6,{8,7},{7,8},{4,4},{1,2},{2,1},3},{3,3}],lists:foreach(fun({V1,V2}) -> digraph:add_edge(G,V1,V2) end,Edges),Components = digraph_utils:cyclic_strong_components(G),List = lists:foldl(fun(Comp,Acc) -> get_more_cycles(G,Comp,[]) ++ Acc end,[],Components),pri(List,length(List)).

get_more_cycles(_G,Acc) ->
    Acc;
get_more_cycles(G,[H|T],Acc) ->
    Cycle = digraph:get_cycle(G,H),get_more_cycles(G,T -- Cycle,[Cycle|Acc]).

这是正确的方法吗,或者是否有任何图形对其不起作用?我的意思是,是否存在漏洞图?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...