POJ 2754 八皇后 解题报告

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][n])
            
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

posted @ 2009-02-06 15:14  端木  阅读(910)  评论(0编辑  收藏  举报