• 八皇后问题(回溯法)


    问题描述:

      这是一个比较经典的问题,棋盘上有8x8共64个格子,要求将八个皇后放置到棋盘上,同时满足任意两个皇后不同行,不同列,并且不位于同一斜线上(45度和135度的斜线),这个问题采用的是回溯法解决的,下述代码是经过学习研究别人的代码得到。

    代码如下:

    #include <iostream>
    #include <stdlib.h>
    #include <math.h>
    using namespace std;
    int position[9];
    char map[9][9];
    int sum=0;
    bool Place(int x,int row)
    {
    
        for(int i=1;i<row;i++)
        {
            int y=position[i];
            if(abs(x-y)==abs(row-i))                                          //如果位于同一条斜线上
                return false;
            else if(position[i]==x)                                           //如果位于同一列上
                return false;
        }
        return true;
    }
    void Seek(int t)
    {
        if(t>8)                                                          //如果t大于8则说明8个皇后位置都已找到
        {
            sum++;                                                       //方案数目计数变量自加
            cout<<"No:"<<sum<<endl;
            for(int i=1;i<=8;i++)                                        //打印皇后的位置
            cout<<position[i]<<" ";
            cout<<endl;
    
            for(int i=1;i<=8;i++)
            {
                for(int j=1;j<=8;j++)
                map[i][j]='.';
            }
            for(int i=1;i<=8;i++)
            {
                int j=position[i];
                map[i][j]='A';
            }
    
            for(int i=1;i<=8;i++)
            {
                for(int j=1;j<=8;j++)
                cout<<map[i][j]<<" ";
                cout<<endl;
            }
        }
        else
        {
            for(int i=1;i<=8;i++)
            if(Place(i,t))
            {
                position[t]=i;
                Seek(t+1);
            }
        }
    }
    int main()
    {
        for(int i=1;i<=8;i++)                                           //初始化存放每行皇后位置的数组
        position[i]=0;
        Seek(1);                                                        //调用寻找皇后位置的函数
        cout<<"Sum:"<<sum<<endl;
        return 0;
    }
    

      

     

     

    态度决定高度,细节决定成败,
  • 相关阅读:
    jquery web 國際化
    Struts2 分割字符串标签s:generator
    (55) 销售锁货功能
    (54) 记录销售单修改详细
    (53) 动态列表自定义
    exe文件作为服务启动
    (52)KeyError错误
    (51) magento集成增加到款通知
    (50)与magento集成
    (49) odoo context操作
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/2831583.html
Copyright © 2020-2023  润新知