回溯算法之 N皇后问题

// n皇后 #include #include #define MAX 15 int n; //n queen int cur; //cur row int A[MAX]; //the ith row's queen put in the A[i]th column int tot = 0; // total nums //cur 为当前遍历到的行。 //从第1~n列中选择一列,使当前皇后放到此位置时,与已经放好的1~cur-1行的皇后不冲突(即不在同一行、同一列、两个对角线上) void search(int cur) { int i, j; if (cur==n+1) //找到n个皇后的位置,打印出 { for (i=1; i


注意到上面程序中判断第i列是否能放当前cur行的皇后的效率比较低,可以改进。

用一个全局变量vis[2][ ] 来保存某列、某主对角线、某副对角线已经被皇后占用。

这样就可以直接判断第i行是否可以放当前的皇后了。

void search2(int cur) { int i, j; if (cur == n+1) { for (i=1; i


第一次写这个程序时将循环计数变量i,j误设置为全局变量,导致程序运行结果不正确。这是一个递归程序,i,j应该为局部变量,才不会导致进一步递归时程序破坏上一次递归栈的局部数据!!



参考文献:《算法竞赛入门经典》 刘汝佳 编著


转载于:https://www.cnblogs.com/hazir/archive/2012/03/28/2447278.html

你可能感兴趣的:(回溯算法之 N皇后问题)