算法学习笔记(三)------递归之N皇后
通过上一次的学习可以知道,如果要实现一个递归函数,那么必须要有两个东西。———— 递归边界 和 递归式 。 递归边界 用于返回最简单的底层的结果。 递归式 用于减小数据规模并向下一层递归。 其实学到这里才发现,递归才是计算机思维,虽然说起来简单,但是正常人的思维模式是不按照递归走的。 今天要研究的是 N皇后问题 ,是回溯算法的典型题,于19世纪被提出。 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 也就是输入整数N(这里是八),求出N个国际象棋在N*N的棋盘上的位置。 #include<iostream> #include<cmath> using namespace std ; int N; int queenPos[ 100 ]; //用来存放算好的皇后位置,最左上角为(0,0) void NQueen( int k) //在0--k-1行皇后已经摆好的情况下,推算k行及以上的摆法 { int i; if (k == N){ //N个皇后已经摆好 for (i= 0 ;i<N;i++) cout <<queenPos[i]+ 1 << " " ; cout <<endl; return ; } for (i= 0 ;i<N;i++