Example #1
0
 // 휴리스틱을 구합니다.
 // h_scr 은 타일이 불 일치하는 값이고,
 // g_scr 은 노드의 깊이를 의미합니다.
 // f_scr 은 h_scr + g_scr 을 더한 값이며, 이를 기준으로 우선탐색을 진행하게 됩니다.
 protected void f(Puzzle3x3 puzzle3x3)
 {
     for (int i = 0; i < 9; ++i)
     {
         if (puzzleState[i] != puzzle3x3.final_state[i])
         {
             ++h_scr;
         }
     }
     if (parent != null)
     {
         g_scr = parent.g_scr + 1;
     }
     f_scr = g_scr + h_scr;
 }
Example #2
0
    public Node(Puzzle3x3 puzzle3x3, int _move, int[] _puzzleState, Node _parent)
    {
        // 부모를 세팅하고 puzzleState를 복사합니다.
        parent      = _parent;
        puzzleState = (int[])_puzzleState.Clone();

        // 공백을 찾고 +move 만큼 움직이고, 해당 값과 교체합니다.
        int blankIDX = Array.FindIndex(puzzleState, x => x == 0);

        puzzleState[blankIDX]         = puzzleState[blankIDX + _move];
        puzzleState[blankIDX + _move] = 0;

        // 휴리스틱 계산
        f(puzzle3x3);
    }