八皇后

终于写完了,听说有92种排序方式,看了不少博客,看到这句话,看别人代码百遍,不如自己写一遍,然后看别人代码,太简洁,没看懂,还是自己写

写了好久,终于成功了,记得加油,下面这个图很魔性,写卡了的时候,可以看看图,继续写


#include <stdio.h>
int queen[9];

void print()//打印
{
    int i,j;
    for(i=1;i<=8;i++)
    {
        for(j=1;j<=8;j++)
            if(queen[i]==j)
                 printf("%c ",2);//打印这个地方,我是模仿别人的打印方式,打印出来,还是蛮不错的,蛮人性化的
            else
                 printf(". ");
        printf("\n");
    }    
}

int check(int i)//判断时候合法
{
    int j;
    for(j=1;j<i;j++)
        if(queen[j]==queen[i]||queen[j]-queen[i]==j-i||queen[j]-queen[i]==i-j)
            return 0;
    return 1;
}

int next(int i)//获得下一行合法位置
{
    int j;
    for(j=1;j<=8;j++)
    {
        queen[i]=j;
        if(check(i)==1)
        {
            return j;
        }        
    }
    return 0;        
}

int replace(int i)//在当前行寻找除去queen[i],也就是queen[i]+1~8之间的可选位置
{
    int j;
    if(queen[i]==8)
        return 0;
    for(j=queen[i]+1;j<=8;j++)
    {
        queen[i]=j;
        if(check(i)==1)
            return i;
    }
    return 0;
}

void Try(int i,int value)
{
    queen[i]=value;
    if(i==8)
    {
        print();
        return;
    }
/*	int m,n;
	for(m=1;m<=8;m++)
	{
		for(n=1;n<=8;n++)
			if(queen[m]==n)
				printf("* ");
			else
				printf("0 ");
		printf("\n");

	}*/

        if(next(i+1)==0)//下一行没有合法位置
        {
            while(replace(i)==0)//当前行也无合法位置,则继续循环上一个合理位置//感觉这个地方,是最后才想好的,感觉很重要
            {
                i--;
                replace(i);
            }
            Try(i,queen[i]);
        }
        else//下一行存在合法位置
            Try(i+1,next(i+1));
}







int main()
{
    int i;
	for(i=1;i<=8;i++)
		queen[i]=0;
	Try(1,1);
    return 0;
}

这只是第一种,以后再更新92种

-----------------------------

来个暴力的,虽然不好,但是他这种很轻便

void put(int n)
{
int i;
for(i=1;i<MAX;i++)
{
s[n]=i;
if(check(n))
{
if(n==MAX-1)
result();
else
put(n+1);
}
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值