knight's tour problem

Please support our C# advertiser: Intel Parallel Studio Home
Reply

Join Date: Dec 2006
Posts: 71
Reputation: pygmalion is an unknown quantity at this point 
Solved Threads: 1
pygmalion's Avatar
pygmalion pygmalion is offline Offline
Junior Poster in Training

knight's tour problem

 
0
  #1
May 27th, 2007
hi

i've been trying to program a solution for the knight's tour problem. i wanted to use recursive backtracking in order to accomplish this.
this is what i have so far. i keep getting stack overflows, but debugging doesn't really help or is quite complicated in some cases.
i'd appreciate any help.

  1. public partial class KnightsTourProblemForm : Form
  2. {
  3. private const int BOARDSIDE = 8;
  4. private int[,] board = new int[BOARDSIDE, BOARDSIDE];
  5.  
  6. public KnightsTourProblemForm()
  7. {
  8. InitializeComponent();
  9. }
  10.  
  11. private bool CheckPosition(int row, int column)
  12. {
  13. return (row >= 0 && row < BOARDSIDE && column >= 0 && column < BOARDSIDE);
  14. }
  15.  
  16. private void StepBack(ref int row, ref int column)
  17. {
  18. board[row, column] = 0;
  19. switch (board[row,column])
  20. {
  21. case 1:
  22. row--;
  23. column -= 2;
  24. break;
  25. case 2:
  26. row -= 2;
  27. column--;
  28. break;
  29. case 3:
  30. row -= 2;
  31. column++;
  32. break;
  33. case 4:
  34. row--;
  35. column += 2;
  36. break;
  37. case 5:
  38. row++;
  39. column += 2;
  40. break;
  41. case 6:
  42. row += 2;
  43. column++;
  44. break;
  45. case 7:
  46. row += 2;
  47. column--;
  48. break;
  49. case 8:
  50. row++;
  51. column -= 2;
  52. break;
  53. }
  54. }
  55.  
  56. private void DisplayBoard(int[,] board)
  57. {
  58. boardLabel.Text = "";
  59. for (int i = 0; i < BOARDSIDE; i++)
  60. {
  61. for (int j = 0; j < BOARDSIDE; j++)
  62. {
  63. if (board[i,j] > 0)
  64. {
  65. boardLabel.Text += "$ ";
  66. }
  67. else
  68. {
  69. boardLabel.Text += "0 ";
  70. }
  71. }
  72. boardLabel.Text += "\r\n";
  73. }
  74. }
  75.  
  76. private bool SolutionFound(int[,] board)
  77. {
  78. for (int i = 0; i < BOARDSIDE; i++)
  79. {
  80. for (int j = 0; j < BOARDSIDE; j++)
  81. {
  82. if (board[i,j] == 0)
  83. {
  84. return false;
  85. }
  86. }
  87. }
  88. return true;
  89. }
  90.  
  91. private void Search(int row, int column)
  92. {
  93. if (! SolutionFound(board))
  94. {
  95. if (CheckPosition(row, column))
  96. {
  97. if (board[row, column] == 0 && CheckPosition(row + 1, column + 2))
  98. {
  99. row++;
  100. column += 2;
  101. board[row, column] = 1;
  102. }
  103. else if (board[row , column] == 1 && CheckPosition(row + 2, column + 1))
  104. {
  105. row += 2;
  106. column++;
  107. board[row, column] = 2;
  108. }
  109. else if (board[row, column] == 2 && CheckPosition(row + 2, column - 1))
  110. {
  111. row += 2;
  112. column--;
  113. board[row, column] = 3;
  114. }
  115. else if (board[row, column] == 3 && CheckPosition(row + 1, column - 2))
  116. {
  117. row++;
  118. column -= 2;
  119. board[row, column] = 4;
  120. }
  121. else if (board[row, column] == 4 && CheckPosition(row - 1, column - 2))
  122. {
  123. row--;
  124. column -= 2;
  125. board[row, column] = 5;
  126. }
  127. else if (board[row, column] == 5 && CheckPosition(row - 2, column - 1))
  128. {
  129. row -= 2;
  130. column--;
  131. board[row, column] = 6;
  132. }
  133. else if (board[row, column] == 6 && CheckPosition(row - 2, column + 1))
  134. {
  135. row -= 2;
  136. column++;
  137. board[row, column] = 7;
  138. }
  139. else if (board[row, column] == 7 && CheckPosition(row - 1, column + 2))
  140. {
  141. row--;
  142. column += 2;
  143. board[row, column] = 8;
  144. }
  145. else
  146. {
  147. StepBack(ref row, ref column);
  148. }
  149. Search(row, column);
  150. }
  151. DisplayBoard(board);
  152. }
  153. }
  154.  
  155. private void generateButton_Click(object sender, EventArgs e)
  156. {
  157. // empty chessboard
  158. for (int i = 0; i < BOARDSIDE; i++)
  159. {
  160. for (int j = 0; j < BOARDSIDE; j++)
  161. {
  162. board[i, j] = 0;
  163. }
  164. }
  165.  
  166. Search(0, 0);
  167. }
  168. }
thanks in advance
pygmalion
Microsoft Employee: "Hey, it compiles! Ship it."
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Similar Threads
Other Threads in the C# Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC