【问题标题】:Unexpected Result with Graphs in ClingoClingo 中图表的意外结果
【发布时间】:2013-10-29 14:59:23
【问题描述】:

我正在尝试在 Clingo 中编写一个程序来解决欧拉路径。到目前为止,这就是我想出的。我希望我的图表如下所示。 我的意见。

    edge(a,b).
    edge(b,c).
    edge(c,d).
    edge(d,e).
    edge(a,d).
    edge(b,d).
    %edge(x,y):-edge(y,x).
    num(1..6).

到目前为止我的程序。

    %Generates paths with X and Ys equal to edges in the input, N can be in the range of 'num'
    1{path(X,Y,N):edge(X,Y)}1:-num(N).

    %Next edges Y and X1 are the same/connect. Where N is in the range of indices.
    :-path(X,Y,N), path(X1,Y1,N+1), Y!=X1, num(N).

我的程序中的 cmets 是否不正确? 我认为该程序应该始终将边缘连接在一起。 因为现在我没有得到答案,但是当“num”步数从 1..4 不等时,我得到了一个解决方案。我相信欧拉路径应该有 6 个步骤,但可能的解决方案是:

path(b,d,1) 
path(d,a,2) 
path(a,b,3) 
path(b,c,4) 
path(c,d,5) 
path(d,e,6) 

【问题讨论】:

    标签: graph answer-set-programming


    【解决方案1】:

    想通了!

    这是输入文件。

        edge(a,b).
        edge(b,c).
        edge(c,d).
        edge(d,e).
        edge(a,d).
        edge(b,d).
        edge(X,Y):-edge(Y,X).
        num(1..6).
    

    还有输出文件。

        1{path(X,Y,N):edge(X,Y)}1:-num(N).
    
        %Next edges Y and X1 are the same/connect. Where N is in the range of indices.
        :-path(X,Y,N), path(X1,Y1,N+1), Y!=X1, num(N).
    
        %Accept no duplicate paths
        :-path(X,Y,N), path(X1,Y1,N2), Y==Y1, X==X1, num(N), num(N2), N!=N2.
        :-path(X,Y,N), path(X1,Y1,N2), Y==X1, X==Y1, num(N), num(N2), N!=N2.
    
        #hide.
        #show path/3.
    

    在我的机器上产生如下输出(为了可读性而颠倒过来):

        path(e,d,1)
        path(d,b,2)
        path(b,c,3)
        path(c,d,4)
        path(d,a,5)
        path(a,b,6)
    

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多