N皇后问题(C语言)

内容:

   N皇后问题应如何完成。即在N*N的棋盘上摆放N个皇后,使其不在同一列,同一行,也不在同一条斜线上。即可成为该问题的一个解。

步骤:

1.算法分析:

       直观的做法是暴力枚举将N个皇后放置在N*N的棋盘上的所有可能的情况,并对每一种情况判断是否满足皇后彼此之间不相互攻击。但是暴力枚举的时间复杂度是非常高的,因此必须利用限制条件加以优化。

       显然,每个皇后必须位于不同行和不同列,因此将N个皇后放置在N*N的棋盘上,一定是每一行有且仅有一个皇后,每一列有且仅有一个皇后,且任何两个皇后都不能在同一条斜线上。基于上述发现,可以通过回溯的方式寻找可能的解。

       回溯的具体做法是:使用一个数组记录每行放置的皇后的列下标,依次在每一行放置一个皇后,每次新放置的皇后都不能和已经放置的皇后之间有攻击:即新放置的皇后不能和任何一个已经放置的皇后在同一列以及同一条斜线上,并且更新数组中的当前行的皇后列下标。当N个皇后都放置完毕,则找到一个可能的解。当栈到一个可能的解之后,值+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值