int sum = 0; //总的方案数
inline void print(int count)
{
for (int i = 0; i < count; i++)
{
int k = queenPos[i];
for (int j = 0; j < count; j++)
{
if (j == k)
cout << i + 1 << ’ ';
else
{
cout << "0 ";
}
}
cout<<endl;
}
cout<<“----------------\n”;
}
inline void NQueen(int k, int n)
{
//查询第k行皇后的位子,在0~k-1行的皇后都已经摆好了 一共0~n-1行 n个皇后
if (n == k) //n个已经摆好了
{
print(n);// 说明一种摆法已经完成,进行打印
sum++;
return;
}
for (int i = 0; i < n; i++) //逐渐尝试第k个皇后的位子,一共n列,每一列都会尝试。无论成功不成功
{
int j;
for (j = 0; j < k; j++) //与已经摆好的比较,
{
if (queenPos[j] == i || abs(queenPos[j] - i) == abs(k-j))//冲突检验
break;
}
if (j == k)
{ //没有出现冲突,
queenPos[k] = i; //将第k行的皇后放在第i列
NQueen(k + 1, n); //寻找第k+1行的皇后摆放位置。
}
}
}
int main()
{
int n;
cin >> n;
NQueen(0, n); //从第0行的皇后开始找起。
cout<<“总方案数为:”<<sum<<endl;
return 0;
}
递归回溯的方法,容易理解,但在时间开销上,却不小,这里推荐一种对时间优化更快的算法。
位运算求解n皇后
void test(int row, int ld, int rd)
{
intpos, p;
if( row != upperlim )
{
pos= upperlim & (~(row | ld | rd ));
while( pos )
{
p= pos & (~pos + 1);
pos= pos - p;
test(row| p, (ld | p) << 1, (rd | p) >> 1);
}
}
else
++Ans;
}
大神给的完整代码+详细备注:
#include “iostream”
using namespace std;
#include “time.h”
// sum用来记录皇后放置成功的不同布局数;upperlim用来标记所有列都已经放置好了皇后。
long sum = 0, upperlim = 1;
// 试探算法从最右边的列开始。
void test(long row, long ld, long rd)
{
if(row != upperlim)
{
//row,ld,rd进行“或”运算,求得所有可以放置皇后的列,对应位为0,
// 然后再取反后“与”上全1的数,来求得当前所有可以放置皇后的位置,对应列改为1
//也就是求取当前哪些列可以放置皇后
longpos = upperlim & ~(row | ld | rd);
while(pos) // 0 – 皇后没有地方可放,回溯
{
//拷贝pos最右边为1的bit,其余bit置0
//也就是取得可以放皇后的最右边的列
longp = pos & -pos;
//将pos最右边为1的bit清零
//也就是为获取下一次的最右可用列使用做准备,
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
前端校招精编面试解析大全点击这里获取完整版pdf查看
节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
前端校招精编面试解析大全点击这里获取完整版pdf查看