Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474186
  • 博文数量: 117
  • 博客积分: 3195
  • 博客等级: 中校
  • 技术积分: 1156
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-04 01:44
文章分类

全部博文(117)

文章存档

2012年(5)

2011年(5)

2010年(46)

2009年(61)

我的朋友

分类: C/C++

2010-06-26 16:42:11



/*回溯*/

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 20
int x[N]; //x[i]:i行的第x[i]列


int ok(int k)
{
    int i;
    for (i=1; i<k; i++)
    {
        if (x[i] == x[k] || abs(x[i]-x[k]) == abs(i-k))
            return 0;
    }
    return 1;
}

void solve(int n)
{
    int k;  //找第k行上的
    k = 1;
    x[k] = 0;
    while (k > 0)
    {
        x[k]++;
        while (x[k] <= n && !ok(k))
        {
            x[k]++;
        }
        if (x[k] <= n)
        {
         if (k == n)
                break;
            else
            {
                k++;
                x[k] = 0;
            }
        }
        else
        {
            x[k] = 0;
            k--;
        }
    }
}

int main()
{
    int n, i;
    while(scanf("%d", &n), n)
    {
        solve(n);
        for (i=1; i<=n; i++)
        {
            printf("%d ",x[i]);
        }
        printf("\n");
    }
    return 0;
}

n最大300,此方法肯定行不通, 只能用构造法,至于构造法...网上到处都是
阅读(898) | 评论(3) | 转发(0) |
0

上一篇:dos转Linux 去掉^M

下一篇:重写 poj3083

给主人留下些什么吧!~~

chinaunix网友2010-06-29 21:36:00

先随机在一些位置上放置皇后,然后回溯搜索~

chinaunix网友2010-06-28 18:51:55

请遥哥指点一下 如何概率算法

chinaunix网友2010-06-28 13:09:43

可以用概率算法~