It seems I hadn’t fully understood the fact that the graph consisted of one
and only one cycle. Thus my first solution is a little overkill for this
problem,
as it should work on any graph.
Here’s another shorter one, probably similar to yours:
cycle=: >@{:@(sol&>/@]^:(<:@#@[) (}. ; {.))
sol=: 13 : '(x{~<<<i);y,t-.~x{~i=.1 i.~x e."1~t=.{:y'
cycle G
1 2 4 5 6 7 8 9 10 11 12 13 24 25 26 23 16 15 14 22 21 20 19 18 17 3 1
Now that I take a better look, they’re almost identical.
All the best,
Louis
> On 25 Aug 2016, at 20:19, R.E. Boss <[email protected]> wrote:
>
> You should swap the first two numbers of your solution, since 2 is not
> adjacent to 4.
>
> It's more or less what I came up with, be it explicit.
> ;{.(3 :('''x y''=.y'; '(y-.t{y);~ x,({:x)-.~y{~t=.1 i.~ y e.~"1
> {:x'))^:(#@>@{:) ({.;}.) edges
> 1 2 4 5 6 7 8 9 10 11 12 13 24 25 26 23 16 15 14 22 21 20 19 18 17 3 1
>
>
> R.E. Boss
>
>
>> -----Original Message-----
>> From: Programming [mailto:[email protected]]
>> On Behalf Of Raul Miller
>> Sent: donderdag 25 augustus 2016 15:36
>> To: Programming forum <[email protected]>
>> Subject: Re: [Jprogramming] determine the cycle
>>
>> Oops, I represented the vertices incorrectly ({."1 would only be valid if the
>> edges were directed).
>>
>> Here's a fix:
>>
>> ~., ((] , -. {~ {.@I.@(-. +./"1@e. {:@]))^:(<:@#@[) ,:@{.) edges
>> 1 2 3 17 18 19 20 21 22 14 15 16 23 26 25 24 13 12 11 10 9 8 7 6 5 4
>>
>> This is the same core implementation, but this should show the actual
>> vertices being traversed in the order they are encountered.
>>
>> Thanks,
>>
>> --
>> Raul
>>
>>
>> On Thu, Aug 25, 2016 at 8:36 AM, 'Jon Hough' via Programming
>> <[email protected]> wrote:
>>> Raul,
>>>
>>> your solution seems to miss out some vertices and duplicates others.
>>>
>>>
>>> --------------------------------------------
>>> On Thu, 8/25/16, Raul Miller <[email protected]> wrote:
>>>
>>> Subject: Re: [Jprogramming] determine the cycle
>>> To: "Programming forum" <[email protected]>
>>> Date: Thursday, August 25, 2016, 9:07 PM
>>>
>>> Best I can come up with
>>> is
>>>
>>> {."1
>>> ((] , -. {~ {.@I.@(-. +./"1@e. {:@]))^:(<:@#@[) ,:@{.)
>>> edges
>>> 1 3 17 18 18 20 20 21 22 14 15 16 23
>>> 26 25 13 12 11 11 10 9 7 6 5 4 2
>>>
>>> Change {.@I. to {:@I. if you want things
>>> in the other order.
>>>
>>> --
>>> Raul
>>> ----------------------------------------------------------------------
>>> For information about J forums see
>> http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see
>> http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm