2011-08-15 2 views
1

나는 프롤로그와 매직 큐브를 해결하기 위해 노력하고있어와 검색을 시작하는 프롤로그에게, 나는이 시도했다 :중지하고 다른 가능성

cubo_resuelto(F, F, F, F, F, F, F, F, F, 
       A, A, A, A, A, A, A, A, A, 
       I, I, I, I, I, I, I, I, I, 
       D, D, D, D, D, D, D, D, D, 
       B, B, B, B, B, B, B, B, B, 
       T, T, T, T, T, T, T, T, T). 

mov(f, cubo(F1, F2, F3, F4, F5, F6, F7, F8, F9, 
      A1, A2, A3, A4, A5, A6, A7, A8, A9, 
      I1, I2, I3, I4, I5, I6, I7, I8, I9, 
      D1, D2, D3, D4, D5, D6, D7, D8, D9, 
      B1, B2, B3, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, T7, T8, T9), 
     cubo(F7, F4, F1, F8, F5, F2, F9, F6, F3, 
      A1, A2, A3, A4, A5, A6, I9, I6, I3, 
      I1, I2, B1, I4, I5, B2, I7, I8, B3, 
      A7, D2, D3, A8, D5, D6, A9, D8, D9, 
      D7, D4, D1, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, T7, T8, T9)). 

mov(a, cubo(F1, F2, F3, F4, F5, F6, F7, F8, F9,% 
      A1, A2, A3, A4, A5, A6, A7, A8, A9, 
      I1, I2, I3, I4, I5, I6, I7, I8, I9, 
      D1, D2, D3, D4, D5, D6, D7, D8, D9, 
      B1, B2, B3, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, T7, T8, T9), 
     cubo(D1, D2, D3, F4, F5, F6, F7, F8, F9, 
      A7, A4, A1, A8, A5, A2, A9, A6, A3, 
      F1, F2, F3, I4, I5, I6, I7, I8, I9, 
      T9, T8, T7, D4, D5, D6, D7, D8, D9, 
      B1, B2, B3, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, I3, I2, I1)). 

mov(d, cubo(F1, F2, F3, F4, F5, F6, F7, F8, F9, 
      A1, A2, A3, A4, A5, A6, A7, A8, A9, 
      I1, I2, I3, I4, I5, I6, I7, I8, I9, 
      D1, D2, D3, D4, D5, D6, D7, D8, D9, 
      B1, B2, B3, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, T7, T8, T9), 
     cubo(F1, F2, B3, F4, F5, B6, F7, F8, B9, 
      A1, A2, F3, A4, A5, F6, A7, A8, F9, 
      I1, I2, I3, I4, I5, I6, I7, I8, I9, 
      D7, D4, D1, D8, D5, D2, D9, D6, D3, 
      B1, B2, T3, B4, B5, T6, B7, B8, T9, 
      T1, T2, A3, T4, T5, A6, T7, T8, A9)). 

mov(i, cubo(F1, F2, F3, F4, F5, F6, F7, F8, F9, 
      A1, A2, A3, A4, A5, A6, A7, A8, A9, 
      I1, I2, I3, I4, I5, I6, I7, I8, I9, 
      D1, D2, D3, D4, D5, D6, D7, D8, D9, 
      B1, B2, B3, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, T7, T8, T9), 
     cubo(A1, F2, F3, A4, F5, F6, A7, F8, F9, 
      T1, A2, A3, T4, A5, A6, T7, A8, A9, 
      I7, I4, I1, I8, I5, I2, I9, I6, I3, 
      D1, D2, D3, D4, D5, D6, D7, D8, D9, 
      F1, B2, B3, F4, B5, B6, F7, B8, B9, 
      B1, T2, T3, B4, T5, T6, B7, T8, T9)). 

mov(b, cubo(F1, F2, F3, F4, F5, F6, F7, F8, F9, 
      A1, A2, A3, A4, A5, A6, A7, A8, A9, 
      I1, I2, I3, I4, I5, I6, I7, I8, I9, 
      D1, D2, D3, D4, D5, D6, D7, D8, D9, 
      B1, B2, B3, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, T7, T8, T9), 
     cubo(F1, F2, F3, F4, F5, F6, I7, I8, I9, 
      A1, A2, A3, A4, A5, A6, A7, A8, A9, 
      I1, I2, I3, I4, I5, I6, T3, T2, T1, 
      D1, D2, D3, D4, D5, D6, F7, F8, F9, 
      B7, B4, B1, B8, B5, B2, B9, B6, B3, 
      D9, D8, D7, T4, T5, T6, T7, T8, T9)). 

mov(t, cubo(F1, F2, F3, F4, F5, F6, F7, F8, F9, 
      A1, A2, A3, A4, A5, A6, A7, A8, A9, 
      I1, I2, I3, I4, I5, I6, I7, I8, I9, 
      D1, D2, D3, D4, D5, D6, D7, D8, D9, 
      B1, B2, B3, B4, B5, B6, B7, B8, B9, 
      T1, T2, T3, T4, T5, T6, T7, T8, T9), 
     cubo(F1, F2, F3, F4, F5, F6, F7, F8, F9, 
      D3, D6, D9, A4, A5, A6, A7, A8, A9, 
      A3, I2, I3, A2, I5, I6, A1, I8, I9, 
      D1, D2, B9, D4, D5, B8, D7, D8, B7, 
      B1, B2, B3, B4, B5, B6, I1, I4, I7, 
      T7, T4, T1, T8, T5, T2, T9, T6, T3)). 

move(+M, OldState, NewState):- 
    mov(M, OldState, NewState). 
move(-M, OldState, NewState):- 
    mov(M, NewState, OldState). 

move_list([], X, X). 
move_list([Move|T], X, Z):- 
    move(Move, X, Y), 
    move_list(T, Y, Z). 

그래서 나는 같은 것을 할 수 있습니다

move_list(X, cubo('R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 
        'B', 'B', 'B', 'B', 'B', 'B', 'G', 'G', 'G', 
        'G', 'G', 'W', 'G', 'G', 'W', 'G', 'G', 'W', 
        'B', 'P', 'P', 'B', 'P', 'P', 'B', 'P', 'P', 
        'P', 'P', 'P', 'W', 'W', 'W', 'W', 'W', 'W', 
        'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'), 
      cubo('R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 
        'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 
        'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 
        'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 
        'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 
        'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y')). 

그리고

X = [+f, +f, +f] 

에 응답 할 것이다 그러나 나는 노력이 :

move_list(X, cubo('R', 'R', 'P', 'R', 'R', 'W', 'P', 'P', 'P', 
        'B', 'B', 'R', 'B', 'B', 'R', 'G', 'G', 'R', 
        'G', 'G', 'W', 'G', 'G', 'W', 'R', 'R', 'W', 
        'B', 'B', 'B', 'P', 'P', 'P', 'B', 'Y', 'Y', 
        'Y', 'Y', 'Y', 'P', 'W', 'W', 'P', 'W', 'W', 
        'W', 'G', 'G', 'Y', 'Y', 'B', 'Y', 'Y', 'G'), 
      cubo('R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 
        'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 
        'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 
        'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 
        'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 
        'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y')). 

프롤로그는 + f 동작으로 해결하려고합니다.

4 + f 시작 이후에 다른 동작으로 프롤로그에 알려주고 싶습니다.

나는 또한 최대 N 개의 움직임을 시도한다고 말하고 싶다.

어떻게하면됩니까?

감사합니다.

추신 : 루빅스 큐브를 푸는 가장 좋은 방법은 아니지만 그 방법을 시도해보고 싶습니다.

답변

1

이동 수를 제한하려면 카운터를 술어에 추가하십시오. 카운터가 한도 내에있는 경우에만 이동이 유효해야합니다. 모든 움직임은 카운터를 줄여야합니다. 카운터는 귀하의 주에 속해야합니다.

Rubik의 큐브를 해결하는 것은 매우 나쁜 방법 인 것 같습니다. 특히 같은 상태에 두 번 도달하는 것을 허용하는 경우에는이를 방지하기 위해 프롤로그에서 역 추적 알고리즘을 설계하는 것이 좋습니다.