八皇后代码

八皇后:

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n1×n1,而皇后个数也变成n2。而且仅当 n2 = 1 或 n1 ≥ 4 时问题有解。

代码

#include <stdio.h>
#include <stdlib.h>
int a[9][9]={0};
void output()
{
    int i,j;
    for(i=1;i<=8;i++)
    {
        for(j=1;j<=8;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    printf("\n********************\n");
}
int check(int i,int k)
{
    int t,j,j1;
    t=0;
    for(j=1;j<=i-1;j++)
    {
        for(j1=1;j1<=8;j1++)
        if(abs(j-i)==abs(k-j1)&&a[j][j1]==1)   //在斜线上且有值
        t=1;
        if(a[j][k]==1)    //在垂直线上且有值
        t=1;

    }
    if(t==0)
        return 1;
    else
        return 0;
}
void try(int i)
{

    int k;
    if(i>=9)
        return ;
    for(k=1;k<=8;k++)
        if(check(i,k)==1)
        {
            a[i][k]=1;
            if(i==8)
                output();
            else
                try(i+1);
            a[i][k]=0;
        }
}
int main()
{
    try(1);
    return 0;
}
posted @ 2018-05-27 21:56  昨夜星辰_tx  阅读(200)  评论(0编辑  收藏  举报