zoukankan      html  css  js  c++  java
  • 八皇后问题(回溯法)

    问题描述:

      这是一个比较经典的问题,棋盘上有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;
    }
    

      

     

     

    态度决定高度,细节决定成败,
  • 相关阅读:
    求二维数组的最大子集和
    电梯调度《二》
    电梯调度问题
    BIEE 通过提示器选择展示列(列名接收表示变量)
    BIEE时间序列函数
    Python学习笔记(三)
    Python学习笔记(二)
    Python学习笔记(一)
    BIE前台常用设置
    BIEE 连接BW query query结构 引用
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/2831583.html
Copyright © 2011-2022 走看看