#include#includeint count = 0;
int nodanger(int row, int i, int (*chess1)[8])
} //判斷左上方向
for (k = row, j = i; k >= 0 && j >= 0; k--, j--) }
//判斷右下方
for (k = row, j = i; k < 8 && j < 8; k++, j++) }
//判斷右上方
for (k = row, j = i; k >= 0 && j <8; k--, j++) }
//判斷左下方
for (k = row, j = i; k < 8 && j >=0; k++, j--) }
if ( flag1 || flag2 || flag3 || flag4 || flag5)
return 0;
else
return 1;
}//row: 當前是第幾行
//cols一共有多少列
//chess棋盤陣列
void eightqueen(int row, int cols, int (*chess)[8]) }
//最小情況
if (row == 8)
printf("\n");
} printf("\n");
} else//一般情況
chess1[row][i] = 1;
eightqueen(row + 1, cols, chess1);
}} }
}int main(void)
} eightqueen(0, 8, chess);
system("pause");
return 0;
}//#include //
//int count = 0;
////int notdanger(int row, int j, int(*chess)[8])
//// }
//// // 判斷左上方
// for (i = row, k = j; i >= 0 && k >= 0; i--, k--)
// // }
//// // 判斷右下方
// for (i = row, k = j; i<8 && k<8; i++, k++)
// // }
//// // 判斷右上方
// for (i = row, k = j; i >= 0 && k<8; i--, k++)
// // }
//// // 判斷左下方
// for (i = row, k = j; i<8 && k >= 0; i++, k--)
// // }
//// if (flag1 || flag2 || flag3 || flag4 || flag5)
// // else
// //}
// 引數row: 表示起始行
引數n: 表示列數
引數(*chess)[8]: 表示指向棋盤每一行的指標
//void eightqueen(int row, int n, int(*chess)[8])
//// }
//// if (8 == row)
// // printf("\n");
// }
// printf("\n");
// count++;
// }
// else
// //
// *(*(chess2 + row) + j) = 1;
//// eightqueen(row + 1, n, chess2);
// }
// }
// }
//}//
//int main()
//// }
//// eightqueen(0, 8, chess);
//// printf("總共有 %d 種解決方法!\n\n", count);
// system("pause");
// return 0;
//}
八皇后問題
八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...
八皇后問題
include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...
八皇后問題
package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...