第一百一十章 优化(1/2)
孟响开始奋笔疾书。他感觉,如果用键盘,他写代码的速度只是一般,毕竟手速跟不上脑子。但是用笔,他仅仅用了3分钟,就撸出了第一个版本的主体函数。当然,这只是八皇后主体程序。
八个for循环鼎立在前方,他有百分百的把握,只要写完,这个解法一定是正确的。
只是他遇到了一个难题。
如果n不是定值时,他不知道要写几个for。
如果n是10,他就是10个for循环……
“这个就是,8个循环嵌套,百分百能求出来,但是如果是n皇后……”孟响说着说着,声音小了下去。
“哥哥!你怎么能用这么笨的方法。”孟梦看到哥哥写好的主体,有些哭笑不得。这种8个for,计算量完全就是指数形式的,属于所有方法中时间最慢,消耗资源最多的方法。
孟响有些尴尬的摸了摸脑袋,时间太短了,他也没法一下想的那么全。
“那…换一种,反正这个的n皇后版本我也不知道怎么改。”孟响在写8个for循环时,脑中已经有了一定雏型,翻过一页纸后,就继续开始写起了第二版。
“先对每一行的每一列进行探测,看是否能放置皇后,如果可以,就在这一列放一个皇后,然后行数加一。然后继续探测下一行的皇后位置。”孟梦在旁边提醒道。
孟响一边点头,一边飞快的开始写主体函数。
“是不是如果已经探测完所有的列都没有找到可以防止皇后的列,就可以回溯了?”孟响抓住一点思路,下意识问道,问的同时,手上的笔一直没停。
“嗯!回溯之后,把上一行的皇后位置往后移一列——”
“如果上一行的皇后也找不到位置,那么应该就继续往前回溯,直至前方某一行找到皇后的位置能移动,或者回到第一行!”孟响接话道,他思路一下子清晰了。“如果回到第一行,也无法找到可以放置皇后的位置,那就表示所有的解都已经找到。”
“哥哥真聪明。”听到哥哥的话,孟梦的大眼睛眯成了月牙儿。她继续说道:“同时,如果一直不用回溯,找到最后一行放置皇后,就表示已经找到一个结果。”
“明白了,因为要找的是所有的解,那么,找到了一个结果后不能直接结束程序,程序应该在第一行无法找到放置皇后的位置时结束。而找到一个结果后,应该清除掉,然后在刚刚放皇后的下一列开始探测。”
孟响嘴里念念叨叨,脑中飞速运转,手上书写的速度更是没有丝毫停顿和放缓,白纸上飞快出现一行行代码。有了孟梦的助力,孟响很快就写完大部分程序。这次,他的循环一下精简到了两个while,和刚刚8个for简直有着天差地别。
这次,他仅仅用了5分钟,就写好了3个函数。
在手写代码的速度上,他有着无与伦比的优势。别人都是受限于思考速度,必须一边停笔理顺思路一边写,而他则不被这个问题困扰。即便是妹妹,也绝对没有他这种快枪手的速度……
“还有10分钟才结束,哥哥真厉害。”孟梦看着哥哥满满地写了一大版,既惊叹哥哥书写代码的速度,又惊叹哥哥非凡的思考速度和理解能力。
哥哥果然和自己一样,也是很聪明的孩子!
“我们一起来过一遍,我来说每个地方的用处,你来帮我把把关。”孟响大致扫了一眼程序。
孟梦点了点头,一边听着哥哥解释程序的逻辑,一边开始判断逻辑的正确性以及是否能优化。
……
“二维数组改成一维数组,数组下标表示行,数组元素表示列,这样能节省内存!”高三那名集训队的学长眼前一亮,思如泉涌。看了看时间,他立马开始写起了第二版的程序。
……
83中文网最新地址www.83zws.com本章未完,点击下一页继续阅读。