四皇后问题求解
本章内容来自《妙趣横生的算法》一书中。
回溯法是一种非常有效,适用范围相当广泛的算法设计思想。许多复杂的问题,规模较大的问题都可以使用回溯法求解。因此回溯法又有"通用解题方法"的美称。
回溯法的基本思想是:在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去;如果该结点不包含问题的解,那就说明以该结点为根结点的子树一定不包含"剪枝"操作。
如果应用回溯法求解问题的所有解,要回溯到解空间树的树根,这样根结点的所有子树都被探索到才结束。如果只要求解问题的一个解,问题的最终解,因此要跳过对以该结点为根的子树的系统探索,逐层向其祖先结点回溯。这个过程叫做解空间树的那么在探索解空间树时,只要搜索到问题的一个解就可以结束了。
应用回溯法的思想求解四皇后问题
分析:
上面一节中已经详细介绍了回溯法解决四皇后问题的基本过程。在这里将给出具体的算法描述和程序清单。
其实在解决四皇后问题时,并不一定要真的构建出这样一棵解空间树,它完全可以通过一个递归回溯来模拟。所谓解空间树只是一个逻辑上的抽象。当然也可以用树结构来真实地创建出一棵解空间树,不过那样会比较浪费空间资源。 #include "stdio.h" int count=0; /*记录四皇后问题解的个数*/ int isCorrect(int i,int j,int (*Q)[4]) { int s,t; for(s=i,t=0;t<4;t++) if(Q[s][t]==1 && t!=j)return 0; /*判断行*/ for(t=j,s=0;s<4;s++) if(Q[s][t]==1 && s!=i)return 0; /*判断列*/ for(s=i-1,t=j-1;s>=0&&t>=0;s--,t--) if(Q[s][t] == 1)return 0; /*判断左上方*/ for(s=i+1,t=j+1;s<4&&t<4;s++,t++) if(Q[s][t] == 1) return 0; /*判断右下方*/ for(s=i-1,t=j+1;s>=0&&t<4;s--,t++) if(Q[s][t] == 1) return 0; /*判断右上方*/ for(s=i+1,t=j-1;s<4&&t>=0;s++,t--) if(Q[s][t] == 1) return 0; /*判断左下方*/ return 1; /*否则返回1*/ } void Queen(int j,int (*Q)[4]){ int i , k; if(j==4) { /*得到了一个解*/ for(i=0;i<4;i++) { for(k=0;k<4;k++) printf("%d ",Q[i][k]); printf(" "); } printf(" "); getche(); count++; return; } for(i=0;i<4;i++) { if(isCorrect(i,j,Q)) /*如果Q[i][j]可以放置皇后*/ { Q[i][j] = 1; /*放置皇后*/ Queen(j+1,Q) ; /*深度优先搜索解空间树*/ Q[i][j] = 0; } } } main() { int Q[4][4]; int i,j; for( i=0;i<4;i++) for( j=0;j<4;j++) Q[i][j] = 0; /*初始化数组Q*/ Queen(0,Q); /*执行四皇后求解*/ printf("The number of the answers of FOUR_QUEEN are %d",count); getche(); }
运行结果:
想买一个家庭用的打印机,也不知道买个什么样的好,有没有哪位大师懂?最近一段时间,回答了七八个关于家用打印机的问题。今天的这个还是这类的问题。下边我详细回答一下,到底家用打印机应该选择那类机型。我们从家用打印机的使用范围,看一下。家用的打印机,主要
现在装电信宽带要多少钱一个月?您好,中国电信的美好家套餐有7档可选,229档以及上可享千兆宽带,需要看用户选择的档次了。电信宽带有多种套餐,不同套餐对应的资费是不同的,另外不同地区的电信宽带套餐资费及优惠也有所
小米MIX4后再无厂商跟进屏下摄像头手机,是否说明屏下方向错了?文小伊评科技方向确实错了。倒是有厂商跟进屏下摄像头,譬如最近发布的中兴AXON30屏下版以及即将发布的AXON40都会搭载类似的技术。不过我们也需要看到,虽然仍有品牌发布采用类似技
华为手机照相添加水印有什么作用?现在除了华为手机,OPPOvivo小米的手机都可以自动添加机型水印,主流的手机当中可能只有苹果没这个功能。不过华为手机的水印并不是默认开启的,必须用户手动开启才会显示出来。具体的方
苹果手机隐私安全比国产手机强很多吗?说实话苹果的系统确实好用,但近年来国产系统的功能也太丰富了点,现在在我这五五开只能说。特别是隐私安全方面,我觉得国产的确实做的很不错,就拿我对象用的OPPOFindX5Pro的Co
苹果iPhone13pro安兔兔跑分1009068正常吗?iPhone13Pro是一款可以给朋友们带来极致享受的手机,性能强悍,优化极致,堪称一经典,是果粉们的最爱之一,很多友友们也很在乎这款手机跑分多少合适?下面介绍下,这款手机的具体参
新共委全称是什么,是个做什么的机构?新共委成立的目的是发展示范集体经济,创新集体资本市场,倡导企业社会责任,聚合跨盈共富体系,全面落实乡村振兴,实现全民共同富裕!新共委致力于帮助政府和企业之间企业和企业之间企业和全民
线上办公协同有哪些工具可以推荐?推荐我们团队正在使用的无忧企业文档,它是一款企业级在线文档,可以协同办公,支持多人在线同时编辑,信息实时同步,私有化部署,支持开源,成本低,是中小企业不错的选择。产品功能方面集成多
你如何看待所谓机械化自动化智能化能解决一切人口问题的思潮?AI取代了人类,所以解决了一切人类问题不只是人口哦。三十年前的人们还以为到了二十一世纪机器人就能普及,但是到了现在机器人普及了吗?现在谈论得比较多的是人工智能,有人认为人工智能会取
网付怎么样?网付为温州专帮信息科技有限公司旗下聚合支付品牌,属于第四方线下支付行业头部企业,在支付领域占据着较强的市场份额。网付是两大支付平台官方授权服务商,享有官方活动资质特权,深耕支付领域
苹果AppStore应用年交易额100万美元以下需缴15佣金财经网科技4月19日讯,据IT之家消息,苹果去年推出了支持小企业和独立开发者的应用商店小企业项目(AppStoreSmallBusinessProgram),将应用内年交易额在10