关闭

POJ 百练 2754 八皇后问题

标签: 递归思想枚举八皇后
282人阅读 评论(0) 收藏 举报
分类:

http://bailian.openjudge.cn/practice/2754/

题意:虽然是汉语,但是也要好好读题。


思路:别人的思路总是轻描淡写,但是我表示很难理解。

这道题想了很久,只能说现在稍微了解。

1: 用递归去把92中排列方式以从小到大方式计算出。那么每一次都要从小开始寻找。

  而很好的是,写递归可以从小开始找,即使某一种不合适八皇后共存也会回溯重新找。

2:对于判断某一个皇后的上下左右、斜边 这个方法很巧妙,用绝对值。

#include<cstdio>
#include<cstdlib>
#include<cstring>

int ans[100][10];
int temp[10];
int num = 1;

void find_it(int i)
{
    int j,k;
    if(i == 9){
        for(j = 1;j <= 8; j++)
            ans[num][j] = temp[j];
            num++;
        return ;
    }
    for(j = 1;j <= 8; j++){
        for(k = 1;k < i; k++)
            if(temp[k] == j || abs(k - i) == abs(temp[k] - j))
                break;
        if(k == i){
            temp[i] = j;
            find_it(i+1);
        }
    }

}

int main()
{
 //   freopen("in.txt","r",stdin);
    int n;
    scanf("%d",&n);

    find_it(1);

    for(int i = 0;i < n; i++){
        int t;
        scanf("%d",&t);
        for(int j = 1;j <= 8; j++)
            printf("%d",ans[t][j]);
        printf("\n");
    }
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43678次
    • 积分:3755
    • 等级:
    • 排名:第8408名
    • 原创:348篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    我的邮箱
      一起交流、成长
      761258121@qq.com
    最新评论