算法篇之递归--八皇后

来源:互联网 发布:java boolean 异或 编辑:程序博客网 时间:2024/06/05 09:56
/*************************************************************************> File Name: eight_queen.cpp> Author: Bob ************************************************************************/#include<iostream>#include<iomanip>#include<stdlib.h>#include<stdio.h>#define EIGHT 8using namespace std;int queen[EIGHT];int number = 0;/*
*打印函数
*/void print( ){int x = 0 , y = 0 ;number += 1 ;cout << endl;cout << "this is the "<< number << "solution"<<endl;for ( x= 0 ; x < EIGHT  ; x ++){for ( y = 0 ; y < EIGHT ; y ++){if ( x == queen[y] ){cout << "<p>";}else cout << "<->";}cout << endl;}getchar();}/* *检查  皇后 放入 是否有危险 *  * queen_No : 皇后编号 * * position : 该皇后放入的位置 * * 通过  斜率 检查 , 同行 检查 * * */bool check_queen( int queen_No , int position){int i = 0 ;int fx , fy ;while ( i < queen_No ){fx = abs ( i - queen_No );fy = abs ( position - queen[i] );if ( fx == fy || position == queen[i] )<span style="white-space:pre"></span>{return false ;}i++;}return true ;}/* * * 决定皇后位置 * 采用递归 * */int decide_position(int queen_No ){int tem_position = 0 ; while ( tem_position < EIGHT ){if ( check_queen ( queen_No , tem_position) )    // 如果皇后放入无危险 {                                                                 //  则记录queen[ queen_No ] = tem_position ;if ( queen_No == EIGHT-1  )                 {print();}else decide_position ( queen_No + 1 );         // 如果 皇后未处理完  进入递归                                                                            // 下一皇后  while 循环完毕 不满足  则返回至  该皇后的这一位置                                                                          // 并且  使该皇后尝试下一位置}tem_position ++ ;}}int main( ){decide_position( 0 );return 0;}

0 0
原创粉丝点击