这种非递归方法还是比较容易理解的
另外还有递归方法,先来看一下递归算法的伪代码
void trial(int row)
{
//递归时候,我们从第0行开始,然后每次递归时候,都向下一行,一直到棋盘的最后一行
//这时候就表示已经是正确的解了,所有进入该函数首先判断是否是正确的解
if(row>N)
{
//输出此时的棋盘
}
else
{
for(int i=0;i<N;++i)
{
//不是解,这时候需要在本行的每一列开始试探放旗子,如果可以的话继续向下递归
#修改记录冲突的数组
if(放在这个位置不会冲突)
{
trial(row+1);
}
放在这里冲突,那么修改回记录的数组,继续下一列
}
}
}
下面给出递归的
查看源代码示例