/*人工知能の授業で習った知識を総動員して書いた、3x3x3 のルービックキューブを解くCプログラム。 A*(エースター)探索、双方向探索、ヒューリスティック関数、ハッシュ関数の合わせ技。 人間がやるようなパターンをなぞる方法じゃなくて、常に最短手順を見つけることを保証する。*/ #include <math.h> #include <stdio.h> #include <stdlib.h> #define D 3 /*3x3x3のルービックキューブ。ここを4にしても4x4x4が解けるわけじゃない*/ struct node{ char surface[6][D][D]; /*ルービックキューブ各面の情報*/ unsigned int cost; /*今の状態に何手で来たかを各ノードに記憶*/ unsigned int heuristic; /*このノードのヒューリスティック値*/ uns