回溯法与分支界限法.docxVIP

  • 9
  • 0
  • 约5.27千字
  • 约 9页
  • 2016-12-30 发布于山西
  • 举报
实验6 回溯法与分支界限法1 回溯法C++代码#includeiostreamusing namespace std;/*判断是否可以在第row行(下标从0开始)放入下一个皇后,可以返回1,否则返回0*/int put_in(int* positions, int row){/*依次判断此皇后之前的所有皇后是否和要放入的皇后位置冲突*/for (int i = 0; i row; i++){/*判断位置是否冲突这里参考的别人写的,其中:不在同一左对角线可以表示为: a[row]-a[i] != row-i不在同一右对角线可以表示为:a[row]-a[i] != -(row-i)这两种情况可以合并为abs(a[row]-a[i]) != abs(row-i)。不在同一列可以表示为a[row] != a[i]因为已经是一行放入一个皇后,所以不会有同一行冲突的情况。*/if (abs(positions[i] - positions[row]) == abs(i - row) || positions[i] == positions[row])return 0;}return 1;}/*递归解决N皇后问题,一次放入一个皇后,参数row表示当前要在第row行放入一个皇后*/int sovle_n_queens(int* positions, int amount_queens,int ro

文档评论(0)

1亿VIP精品文档

相关文档