而张栋梁也被位运算法勾起了好奇,因为这确实是目前n皇后问题的最优解法。白书上就有这个解法的例子。但是例子归例子,理解起来可不是那么容易的,更别说讲解了。</p>
孟梦坐在底下捂着脸趴在桌子上,不断地磨着牙。</p>
哥哥怎么可能写得完,只有两分钟时间,完蛋了,她们要得0分了。</p>
想到这,孟梦就有股想上台把哥哥拽下来自己去讲解的冲动。</p>
但是想了想,她不会代码,只能放弃。</p>
得0分,好丢人呀!</p>
孟梦的小脑袋不断往自己的手臂弯里钻着,一副非常苦恼的模样。</p>
孟响一边写代码,没有丝毫停顿,一边讲解道:“这个算法的核心就是使用bit数组来代替以前由int或者bool数组来存储当前格子被占用的情况。”</p>
“程序中主要需要三个bit数组,每个对应的是n皇后格子的一列和正斜列和反斜列。”孟响一边说,一边写了一个函数:</p>
void test(long row,long ld,long rd)......</p>
“其中row表示一列上是否有皇后,如果有则是1,如果没有就是0,ld和rd分别表示正斜列和反斜列是否有皇后,接着我们要对这三个参数进行或运算,求得所有可以放置皇后的列,对应位是0。”</p>
大伙瞪大了眼睛,看着孟响手中飞速舞动的黑色涂鸦笔,一行行代码整齐的展现在白色小板上。</p>
“然后,我们要对结果取反,取反之后与上全1的数,来求得当前所有可以放置皇后的位置,对应列数改为1,也就是求取当前哪些列可以放皇后。”说到这,孟响连续写下了数个表达式。</p>
大部分学生只能懵逼的看着孟响一边讲一边写代码,只有小部分人能够勉强跟上孟响的思路。毕竟,即便是自己去理解这种位运算,没有十多分钟也很难理解,更别说这短短的两分钟之内了。</p>
而张栋梁站在一旁看着孟响,在他看来,目前孟响的代码还没有什么错误,讲解对他来说也非常详细。</p>
“pos&-pos的意思就是取最右边的1再组成二进制数。”</p>
“然后......将pos最右边为1的bit清零。”</p>
“......”</p>
“row所有位都为1时,即找到了一个成功的布局,然后我们记录下来,回溯。”</p>
“然后我们考虑棋盘的对称性......”</p>
孟响的语速越来越快,手中的书写速度也越来越快,随着时间逐渐走向终点,在众人以及妹妹惊讶的眼神中,他赶在时间到达前,写完和讲解完了位运算的方法。</p>
(https://www.yqwxw.cc/html/115/115571/25415204.html)</p>
www.yqwxw.cc。m.yqwxw.cc</p>