zoukankan      html  css  js  c++  java
  • 八皇后问题

    View Code
    我写这个代码的原因是因为,八皇后问题是一个非常经典的递归问题,自己又掌握的不是很熟练,为了防止忘记,可以随时拿出来看一看,加深理解
    #include<stdio.h>
    int num; // 统计方案数目
    int q[9]; // 记录每行皇后所在的列号
    int c[9]; // 标记当前列是否安全,值取0(不安全)或1(安全)
    int l[17]; // 标记左上到右下的对角线是否安全,值取0(不安全)或1(安全)
    int r[17]; // 标记坐下到右上的对角线是否安全,值取0(不安全)或1(安全)
    void queen(int i)
    {
        int j,k;
        for(j = 1;j <= 8; ++j)
        {
            if(c[j] && l[i-j+9] && r[i+j])        // (i,j)所在的位置是安全的
            {
                q[i] = j;                        // 存储当前皇后的列位置
                c[j] = 0;
                l[i-j+9] = 0;
                r[i+j] = 0;                        // 修改(i,j)位置的三个安全标记
                if(i < 8)
                    queen(i+1);                    // 未放完8个皇后的,继续放下一个
                else                            // 已放完皇后的,执行如下操作
                {
                    num++;                        // 方案计数加1
                    printf("方案%2d: ",num);    // 输出方案数
                    for(k = 1;k <= 8; k++)
                        printf("%d ",q[k]);     // 输出
                    printf("\n");
                }
                c[j] = 1;
                l[i-j+9] = 1;
                r[i+j] = 1;
            }
        }
    }
    int main()
    {
        int i;
        num = 0;
        for(i = 0;i < 9; ++i)
            c[i] = 1;
        for(i = 0;i < 17; i++)
            l[i] = r[i] = 1;
        queen(1);
        return 0;
    }
  • 相关阅读:
    Discuz!NT 系统架构分析
    jquery pager
    Nhibernate分页方法
    Discuz nt模板机制
    WTclient创建OPC client方法
    OPC
    Regular Expressions in Java
    How to use VS to manipulate Access
    OPC客户端设计
    How to use VS to manipulate Excel使用MFC读写Excel
  • 原文地址:https://www.cnblogs.com/SDUTYST/p/2513765.html
Copyright © 2011-2022 走看看