码迷,mamicode.com
首页 > 编程语言 > 详细

回溯算法(八皇后问题)

时间:2018-09-04 00:06:58      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:程序实现   html   https   log   ret   程序   col   out   logs   

八皇后问题

在国际象棋中,皇后是最强大的一枚棋子,可以吃掉与其在同一行、列和斜线的敌方棋子。
将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法?

程序实现

程序摘自回溯法与八皇后问题

#include<iostream>
#include<math.h>
using namespace std;

int n=8;
int total=0;
int *c=new int(n);                    //下标为行数,存的数为列数

bool is_ok(int row){
    for(int j=0;j!=row;j++){    
        if(c[row]==c[j] ||              //检测是否在同一列          
            row-c[row]==j-c[j] ||    //检测是否在同一”\“斜线上
            row+c[row]==j+c[j])    //检测是否在同一"/"斜线上
            return false;
    }
    return true;
}

void queen(int row){
    if(row==n)
        total++;
    else
        for(int col=0;col!=n;col++){
            c[row]=col;
            if(is_ok(row))
                queen(row+1);
        }       
}

int main(){
    queen(0);
    cout<<total;
    return 1;
}

回溯算法(八皇后问题)

标签:程序实现   html   https   log   ret   程序   col   out   logs   

原文地址:https://www.cnblogs.com/narjaja/p/9581765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!