944,111 Members | Top Members by Rank

Ad:
  • C# Discussion Thread
  • Unsolved
  • Views: 2665
  • C# RSS
May 27th, 2007
0

knight's tour problem

Expand Post »
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.

C# Syntax (Toggle Plain Text)
  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
Similar Threads
Reputation Points: 12
Solved Threads: 1
Junior Poster in Training
pygmalion is offline Offline
71 posts
since Dec 2006

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C# Forum Timeline: Namespaces
Next Thread in C# Forum Timeline: C# Karaoke





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC