详细请点击:http://www.verydemo.com/demo_c92_i2205.html
c++经典书多,但貌似不太新,而python则新书很多,能体现一些新思路新概念。看python的书,写python代码,再用c++实现一遍,这样互补的学习方式貌似也蛮适合自己的。
在《Beginning Python From Novice to Professional》一书的八皇后问题上,python果然精妙而优雅。
在对待
- foreachpossibilityatlevel1:
- foreachpossibilityatlevel2:
- foreachpossibilityatleveln:
- ...
- isitviable
形式的循环下,它有yield, generator递归。短短20来行代码就搞定了八皇后,如下:
- defconflict(state,nextX):
- nextY=len(state)
- ifnextY==0:print0
- foriinrange(nextY):
- ifabs(nextX-state[i])in(0,nextY-i):
- returnTrue
- returnFalse
- defqueen(num,state=()):
- printstate
- forposinrange(num):
- ifnotconflict(state,pos):
- iflen(state)==num-1:
- yield(pos,)
- else:
- forresultinqueen(num,state+(pos,)):
- yield(pos,)+result
- defprettyprint(solution):
- defline(pos,length=len(solution)):
- return'.'*pos+'X'+'.'*(length-pos-1)
- forposinsolution:
- printline(pos)
- if__name__=='__main__':
- importrandom
- prettyprint(random.choice(list(queen(4))))
其中
- forresultinqueen(num,state+(pos,)):
- yield(pos,)+result
2句由为精妙,自己苦思很久,没有能完全理解yield的精髓。。。。。
在用c++实现的时候,一直想模仿实现这句话的功能,却被这句话困扰了2个多小时,看书看久了不休息果然效率奇差。
今天早上醒来,才恍然大悟,其实不就是个栈么。
- /*
- *=====================================================================================
- *
- *Filename:eightqueen.cpp
- *
- *Description:8皇后问题,c++实现
- *
- *Version:1.0
- *Created:2008年12月30日19时46分52秒
- *Revision:none
- *Compiler:gcc
- *
- *Author:LiWeiJian(mn),lwj1396@163.com
- *Company:hunanuniversity
- *
- *=====================================================================================
- */
- #include<vector>
- #include<iostream>
- #include<cmath>
- usingnamespacestd;
- boolconflict(constvector<int>&state,intnextX)
- {
- intnextY=state.size();
- for(inti=0;i<nextY;i++)
- {
- if(abs(nextX-state[i])==0||abs(nextX-state[i])==(nextY-i))
- returntrue;
- }
- returnfalse;
- }
- voidqueen(intnum,vector<int>&state)
- {
- for(inti=0;i<num;i++)
- {
- state.clear();
- state.push_back(i);
- intpos=0;
- while(state.size()!=num)
- {
- if(conflict(state,pos))//冲突了
- {
- if(pos==num-1)//已经是最后一个位置
- {
- state.pop_back();
- break;
- }
- pos++;//尝试下一个pos
- continue;
- }
- else//没有冲突
- {
- state.push_back(pos);
- pos=0;
- }
- }
- if(state.size()==num)
- return;
- }
- }
- voidprint(intnum,constvector<int>result)
- {
- for(inti=0;i<result.size();i++)
- {
- for(intj=0;j<result[i];j++)
- cout<<".";
- cout<<"X";
- for(intj=0;j<num-result[i]-1;j++)
- cout<<".";
- cout<<endl;
- }
- }
- intmain()
- {
- vector<int>state;
- queen(16,state);
- print(16,state);
- }
在实现之后,对比了一下,效率的差距果然满大,python跑14皇后,等了几分钟没搞定,而c++跑16皇后,都是刷的一下出来了,不过可能c++没有用递归也是一个原因。
最后再总结2句:
1 一本书,无论薄厚,都不能欺负它,不要想1,2天就看完
2 c++虽然经典,但书籍过老了,要拿一门有活力的语言为它开路,其实boost的c++已经很python了。
相关推荐
八皇后问题 c++ 八皇后问题 c++ 八皇后问题 c++
n皇后问题C++源码。{典型的8皇后问题的扩展)
基于c++和python实现的360环视相机校正-去畸变-俯视变换-图像拼接-图像融合源码.zip 【项目说明】 360环视相机校正-去畸变-俯视变换-图像拼接-图像融合 360环视相机校正-去畸变-俯视变换-图像拼接-图像融合 360环视...
快速排序的C++和python实现 对比两种实现,可以发现python实现起来更加简单清晰易懂
C#调用C++,C++调用Python并传参,包括C++向python传递图片数据,C++向python传递组数据,C++向python传递字符串数据,C++向python传递结构体数据,C++初始化python类数据并调用方法,实际案例,能直接运行,需要安装...
经典的算法,八皇后问题,c++实现,回溯法
使用C++语言,以回溯思想解决八皇后问题,可以帮助深入理解算法的本质,同时不局限于理论。
要求用回溯法求解 8-皇后问题,使放置在 8*8 棋盘上的 8 个皇后彼此不受攻击,即:任何两个皇后都不在同一行、同一列或同一斜线上。请输出 8 皇后问题的所有可行解。
摘要:介绍了基于C++和Python混合语言编程的WORD文档操作技术及其实现,针对C++开发的原系统对 WORD 文档操作不方便的问题,利用 Python脚本
完整的C++调用Python脚本源码,包含参数传递和函数返回值处理等,且解决传递中文参数出现乱码等问题
N皇后问题C++源码, 利用回溯法实现的. 有什么可以一块讨论.
n皇后问题,基于深搜的c++描述,算法入门。。。
C++和Python实现的基于卷积神经网络的校园垃圾识别系统.zip 已获导师指导并通过的高分项目,代码完整下载即用,确保可以直接运行无需修改。 C++和Python实现的基于卷积神经网络的校园垃圾识别系统.zip 已获导师...
重新使用c++简单地实现了回溯算法经典例子——八皇后问题,希望对大家有帮助
简洁高效的八皇后问题C++实现,其中主要运用递归的方法。八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其...
C++和Python是开发过程中比较常用的两种语言,实现两者之间的调用能够很好的发挥两种语言的优势。该资源C++调用Python过程的简单示例。
用C++实现四皇后问题,实现思路清晰,注释清楚明了,代码结构工整,用于学习数据结构,内含demo源代码,可以运行。
Linux下C++ 与python人脸检测