您的位置:首页 > 编程语言 > C语言/C++

ai-2698-八皇后问题-C语言-递归求解

2017-05-09 22:14 351 查看
算法丑陋,速度略慢,还望指教。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
short queenplaces[92][8];//每个8位数组记录了那一列皇后所在的列index
short nowline=0;
short board[8][8];
void putqueen(int n)//n+1表示正在解决哪一个皇后了
{
short i,j,k;
if(n==8)
{
nowline++;
return;
}
for(i=0;i<8;i++)
{
if(board[i]
==0)
{
for(j=nowline;j<92;j++)
queenplaces[j]
=i;
board[i]
=1;
for(j=0;j<8;j++)
for(k=0;k<8;k++)
(board[j][k]==0&&(i==j||n==k||abs(i-j)==abs(k-n)))?(board[j][k]=n+1):0;
putqueen(n+1);
for(j=0;j<8;j++)
for(k=0;k<8;k++)
(board[j][k]==n+1&&(i==j||k==n||abs(i-j)==abs(k-n)))?(board[j][k]=0):0;
board[i]
=0;
}
}
}
int main()
{
short i,j,k;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
board[i][j]=0;
putqueen(0);
for(i=0;i<92;i++)
{
printf("No. %d\n",i+1);
for(j=0;j<8;j++)
{
for(k=0;k<8;k++)
(j==queenplaces[i][k])?(printf("1 ")):(printf("0 "));
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: