#include <stdio.h>
/*
* NOTE: 该程序是一个解N皇后棋局问题的算法(采用递归解决)
* 编译环境 VC++ 6
*/
/* 程序随N值的改变,从而来解决N皇后问题 */
#define N 4
int solution[N], sols;
/* 放置皇后到位置(row,col),若成功返回1,失败返回0 */
int place(int row)
{
int j;
for (j = 0; j < row; j++) /* j代表行 */
{
if ( row - solution[row] == j - solution[j] ||
row + solution[row] == j + solution[j] ||
solution[j] == solution[row] )
return 0;
}
return 1;
}
/* row代表开始轮到放第 row 行了,前 row-1 行都已放好 */
void backtrack(int row)
{
int k;
if ( N == row )
{
sols++; // 解的结果加1
/* 循环打印八皇后棋局(下标转换成从1开始) */
for( k=0 ; k<N ; k++ )
printf("(%d,%d) ", solution[k]+1,k+1);
printf("/n");
}
else
{
int i;
for( i=0 ; i<N ; i++ )
{
solution[row] = i;
if( place(row) )
backtrack(row + 1);
}
}
}
void queens()
{
backtrack(0);
}
int main(void)
{
queens();
printf("Total Solutions: %d/n", sols);
return 0;
}
八皇后问题v2
最新推荐文章于 2024-09-13 16:27:15 发布