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

来源:互联网 发布:知世故而不世故 下联 编辑:程序博客网 时间:2024/06/05 08:04

算法丑陋,速度略慢,还望指教。

#include <stdio.h>#include <stdlib.h>#include <math.h>short queenplaces[92][8];//每个8位数组记录了那一列皇后所在的列indexshort 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][n]==0)        {            for(j=nowline;j<92;j++)                queenplaces[j][n]=i;            board[i][n]=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][n]=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;}

0 0
原创粉丝点击