viric@6: #include viric@0: #include viric@0: #include viric@0: #include viric@4: #include "general.h" viric@0: viric@0: #define NBOX(n) ((n)<<2) viric@0: viric@0: /* SOKOBAN Solution Finder viric@0: * viric@0: * Input File Format: XSB viric@0: * viric@0: * XSB Format definition: viric@0: * Character matrix of: viric@0: * @ MAN viric@0: * # WALL viric@0: * $ BOX viric@0: * * BOX over PLATFORM viric@0: * + PLATFORM viric@4: * - CORNER (optional) Where a BOX should not be put viric@0: * Everything that cannot be reached by the man or boxes (WALLS) must be viric@0: * marked as is: WALLS. viric@0: * All lines must be of the same length. viric@0: */ viric@0: viric@0: viric@0: viric@0: viric@0: viric@0: viric@0: viric@0: int main(int argn, char **argv) viric@0: { viric@0: struct Map Morigin; viric@0: viric@0: if (argn != 2) viric@0: { viric@0: printf("Usage: %s \n", argv[0]); viric@0: exit(3); viric@0: } viric@0: ReadMap(&Morigin, argv[1]); viric@6: assert(Morigin.NumPlatforms > Morigin.NumBoxesInPlatform); viric@0: viric@6: init_os(); viric@0: viric@6: return solve_map(Morigin); viric@0: }