knight.c 776 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. void *calloc();
  4. int N;
  5. int **b;
  6. board()
  7. {
  8. int x;
  9. int y;
  10. for (y=0; y<8; y++) {
  11. for (x=0; x<8; x++)
  12. printf(" %02d", b[x][y]);
  13. printf("\n");
  14. }
  15. printf("\n");
  16. return 0;
  17. }
  18. chk(int x, int y)
  19. {
  20. if (x < 0 || x > 7 || y < 0 || y > 7)
  21. return 0;
  22. return b[x][y] == 0;
  23. }
  24. go(int k, int x, int y)
  25. {
  26. int i;
  27. int j;
  28. b[x][y] = k;
  29. if (k == 64) {
  30. if (x != 2 && y != 0 && abs(x-2) + abs(y) == 3) {
  31. board();
  32. N++;
  33. if (N == 10)
  34. exit(0);
  35. }
  36. } else
  37. for (i=-2; i<=2; i++)
  38. for (j=-2; j<=2; j++)
  39. if (abs(i) + abs(j) == 3 && chk(x+i, y+j))
  40. go(k+1, x+i, y+j);
  41. b[x][y] = 0;
  42. return 0;
  43. }
  44. main()
  45. {
  46. int i;
  47. b = calloc(8, sizeof (int *));
  48. for (i=0; i<8; i++)
  49. b[i] = calloc(8, sizeof (int));
  50. go(1, 2, 0);
  51. }