您的位置:首页 > 其它

POJ 2754 八皇后 解题报告

2009-02-06 15:14 417 查看
POJ 2754 八皇后 解题报告

编号:2754

 

考查点:递归、回溯

 

思路:我的方法有点搞笑,先模拟棋盘,递归找出92种可能性,处理后存储,然后根据后面的标准输入直接显示即可,难点一是递归条件,二是判断是否符合,在判断是否符合那漏了行列变换方向不一致的情况,幸亏后来一眼就看出来了.。

 

提交情况: 久仰八皇后问题大名,一直以为自己搞不定,昨天都没敢作这道题,结果今天看了会,竟然20分钟搞定,而且直接AC.汗.>

 

Source Code:

 //POJ Grids 2754

#include <iostream>

using namespace std;

int qnum[93];

void Display(bool flag[][8])

{

    static int num = 0;

    num++;

    int temp = 0;

    for (int i=0;i<8;i++)

    {

        for (int j=0;j<8;j++)

        {

            if (flag[i][j])

                temp = temp*10+j+1;

        }

    }

    qnum[num] = temp;

}

bool Search(bool flag[][8],int m,int n)

{

    for (int i=0;i<7;i++)

    {

        if (flag[m][i])

            return false;

        if (flag[i]
)

            return false;

    }

    for (int i=m,j=n;i>=0&&j>=0;i--,j--)

    {

        if (flag[i][j])

            return false;

    }

    for (int i=m,j=n;i<=7&&j<=7;i++,j++)

    {

        if (flag[i][j])

            return false;

    }

    for (int i=m,j=n;i>=0&&j<=7;i--,j++)

    {

        if (flag[i][j])

            return false;

    }

    for (int i=m,j=n;i<=7&&j>=0;i++,j--)

    {

        if (flag[i][j])

            return false;

    }

    return true;

}

void Queen(bool flag[][8],int m)

{

    if (m==8)

    {

        Display(flag);

        return;

    }

    else

    {

        for (int i=0;i<8;i++)

        {

            if (Search(flag,m,i))

            {

                flag[m][i] = true;

                Queen(flag,m+1);

                flag[m][i] = false;

            }

        }

    }

}

int main()

{

    bool flag[8][8];

    int m,n;

    m = n = 0;

    memset(flag,false,sizeof flag);

    Queen(flag,m);

    int count;

    cin>>count;

    while (count--)

    {

        int m;

        cin>>m;

        cout<<qnum[m]<<endl;

    }

    return 0;

}
总结:首先,以为自己的代码会MemoryLE,结果竟然没超,呵呵.。然后就是相信自己.。

 

 

 

                                                      
By   Ns517

                                                     
Time 09.02.06
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: