1
0

pa11.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <libgen.h>
  5. #include "pa11.h"
  6. int main(int argc, char * * argv)
  7. {
  8. if (argc < 3)
  9. {
  10. fprintf(stderr, "Invalid arguments, please refer to "
  11. "the README file, or read the source for "
  12. "pa11.c\n");
  13. return EXIT_FAILURE;
  14. }
  15. char * state = argv[2];
  16. if(!isValidState(state))
  17. {
  18. fprintf(stderr, "Invalid state: %s\n", state);
  19. return EXIT_FAILURE;
  20. }
  21. if (strcmp(argv[1], "1") == 0)
  22. {
  23. if (argc < 4)
  24. {
  25. fprintf(stderr, "Invalid arguments for cmd=1\n");
  26. return EXIT_FAILURE;
  27. }
  28. const char * movelist = argv[3];
  29. if(!isValidMoveList(movelist))
  30. {
  31. fprintf(stderr, "Invalid movelist: %s\n",
  32. movelist);
  33. return EXIT_FAILURE;
  34. }
  35. processMoveList(state, movelist);
  36. }
  37. if (strcmp(argv[1], "2") == 0)
  38. {
  39. if (argc < 4)
  40. {
  41. fprintf(stderr, "Invalid arguments for cmd=2\n");
  42. return EXIT_FAILURE;
  43. }
  44. int nummove = (int) strtol(argv[3], NULL, 10);
  45. if ((nummove < 0) || (nummove > 9))
  46. {
  47. fprintf(stderr, "Expected n=[0..9], but got %d\n",
  48. nummove);
  49. return EXIT_FAILURE;
  50. }
  51. MoveTree * tree = generateAll(state, nummove);
  52. MoveTree_print(tree);
  53. MoveTree_destroy(tree);
  54. }
  55. if (strcmp(argv[1], "3") == 0)
  56. {
  57. char * movelist = solve(state);
  58. if(movelist == NULL) {
  59. printf("No solution within %d steps\n",
  60. MAX_SEARCH_DEPTH);
  61. } else {
  62. printf("%s\n", movelist);
  63. }
  64. free(movelist);
  65. }
  66. return EXIT_SUCCESS;
  67. }