首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clingo中图的意外结果

Clingo中图的意外结果
EN

Stack Overflow用户
提问于 2013-10-29 14:59:23
回答 1查看 538关注 0票数 1

我正试图在Clingo中创建一个程序来解决Euler路径。到目前为止,这是我想出来的。我希望我的图表出现如下。

我的意见。

代码语言:javascript
复制
    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).

到目前为止我的节目。

代码语言:javascript
复制
    %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).

我在节目中的评论是否不正确?我认为程序应该总是把边缘连接在一起。因为现在我没有得到答案,但是当步骤"num“的数目从1..4范围内时,我得到了一个解决方案。我认为Euler路径应该有6个步骤,但可能有以下几个步骤:

代码语言:javascript
复制
path(b,d,1) 
path(d,a,2) 
path(a,b,3) 
path(b,c,4) 
path(c,d,5) 
path(d,e,6) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-29 23:53:17

弄明白了!

这是输入文件。

代码语言:javascript
复制
    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).

以及输出文件。

代码语言:javascript
复制
    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.

它在我的机器上产生如下输出(为可读性反转):

代码语言:javascript
复制
    path(e,d,1)
    path(d,b,2)
    path(b,c,3)
    path(c,d,4)
    path(d,a,5)
    path(a,b,6)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19661782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档