1_8_queen.cvc 1021 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * quene.c
  3. *
  4. *
  5. * Created by Andrew on 2/5/11.
  6. * Copyright 2011 UvA. All rights reserved.
  7. *
  8. */
  9. extern void printInt( int val);
  10. extern void printFloat( float val);
  11. extern int scanInt( );
  12. extern float scanFloat( );
  13. extern void printSpaces( int num);
  14. extern void printNewlines( int num);
  15. int[8] x;
  16. int abs_sub(int i,int j)
  17. {
  18. int k;
  19. if(i>=j)
  20. k=i-j;
  21. else
  22. k=j-i;
  23. return k;
  24. }
  25. void print ()
  26. {
  27. int i;
  28. int j;
  29. for (int i=0,8)
  30. {
  31. for (int j=0,8)
  32. {
  33. if (j==x[i])
  34. {
  35. printInt(i*10+j);
  36. printSpaces(3);
  37. }
  38. }
  39. }
  40. printNewlines(1);
  41. }
  42. /* tests, whether (ix, iy) is beaten by queens 0...(iy-1) */
  43. int is_free (int ix, int iy)
  44. {
  45. int i;
  46. int flag=1;
  47. for (int i=0,iy)
  48. if ((x[i]==ix) || (abs_sub(x[i],ix)==abs_sub(i,iy)))
  49. flag= 0;
  50. return flag;
  51. }
  52. /* tries to place queen n on row n */
  53. void try (int n)
  54. {
  55. int i;
  56. if (n==8) print();
  57. else
  58. {
  59. for (int i=0,8)
  60. if (is_free(i,n)==1)
  61. {
  62. x[n]=i;
  63. try (n+1);
  64. }
  65. }
  66. }
  67. export int main()
  68. {
  69. try(0);
  70. return 0;
  71. }