代码改变世界

八皇后问题

2013-04-08 20:23  liuzq2013  阅读(145)  评论(0)    收藏  举报

睡眠不足,思路很不清晰,所以写得比较凌乱,以后再改。

#include <iostream>
#include <stdlib.h>
using namespace std;
int abs(int a)
{
    if(a<0) a=-a;
    return a;
}
bool isSafe(int i1,int j1,int i2,int j2)
{
    if(j1==j2||abs(j2-j1)==abs(i2-i1))
        return false;
    return true;
}
void queen()
{
    int p[8],count=0;
    int i=1;//for finalizing!
    bool a=true;
    for(int k=0;k<8;k++)
        p[k]=0;
    while(p[0]<8)
    {
        if(p[0]==8) exit(1);
        while(i<8)
        {
            if(p[i]>7) 
                a=false;
            else 
                a=true;
            for(int k=0;k<i;k++)
            {
                if(!isSafe(k,p[k],i,p[i])) {p[i]++;a=false;break;}
            }
            if(p[i]>7&&i!=0)
            {
                i--;
                p[i]++;
                for(int k=i+1;k<8;k++)
                    p[k]=0;
            }
            if(a)    
                i++;
        }
        if(i==8)
        {
            count++;
            cout<<"Method "<<count<<": ";
            for(int k=0;k<8;k++)
                cout<<p[k]<<"\t";
            cout<<endl;
            i=6;
            p[i]++;
            for(int k=i+1;k<8;k++)
                p[k]=0;
        }
    }
}
int main()
{
    queen();
    return 0;
}