- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四色定理解题报告
“ ” 四色定理解题报告 作者:魏泽宇 来源:JZXXOJ-1060 目录 算法的基本细化 题目及算法初步构建 进一步细化 程序 AC 先看题目 著名的四色定理你一定听说过吧?这可是近代世界三大数学难题之一唷(顺便提上一句,另外两个是费马定理和哥德巴赫猜想)。 四色定理的提出来自英国。1852年,毕业于伦敦大学的弗南西斯?格思里(Francis Guthrie)在一家科研单位搞地图着色工作时,发现了一种有趣的现象:“看来,每幅地图都可以用四种颜色着色,使得有共同边界的国家着上不同的颜色。”(注意:只要求有公共边的区域不同色就可以,只有公共顶点的同色也没关系)。 四色定理一直都无法证明。 直到1976年,在J. Koch的算法的支持下,美国数学家阿佩尔(Kenneth Appel)与哈肯(Wolfgang Haken)在美国伊利诺斯大学的两台不同的电子计算机上,用了1200个小时,作了100亿判断,才终于完成了四色定理的证明。 你的任务相对那些数学家们来说当然要容易得多:你只要编写一个程序,计算一下在给定的一张有5个区域的地图上,用四种颜色填充不同区域,并保证有公共边的区域不同色的方案数有多少就可以了。 输入输出及样例 输入 第一行是一个整数 N(0 ≤ N ≤ 10 ),分别表示地图中有公共边的区域的信息数量。下面 N 行,每行一对整数,表示对所有区域编号之后,此两个编号的区域是有公共边的。 ?输出 只有一个整数,表示用四种颜色填充地图的总方案数。注意,在某些方案中,所有四种颜色不必都用到。 input output 4 324 1 2 1 3 1 4 1 5 题意分析 看到这题我想到一个单词:water。我想:这题应该用深搜做, 阶段是当前填完了多少格子。 但是,理想很丰满,现实很骨感。我编好框架就傻眼了。 言归正传,刚刚说了阶段是当前填完了多少格子,那么,每个阶段要干嘛呢? 1.判断是否填完,填完则找到一种解(本题是求解总数)。 2.枚举k位置上所有可能的颜色。 3.若颜色可以填则填进去,填k+1号格子,现场恢复。 一级算法 开始 PRO search(k) if 到达边界 then 增加解总数,返回 枚举k位置上所有可能的颜色i if 颜色i 符合条件 then 现场保存 search(k+1)现场恢复 Main 输入,初始化,预处理,进行第一阶段枚举,输出 结束 算法的基本细化 增加解总数的方法是inc(total)。 我们可以加一个pd函数,用来判断颜色是否可以填。 第一阶段枚举时也要做现场保存和现场恢复这些工作,主程序调用search参数是2。 预处理可以把基本数据变成邻接表。 代码碎片1:深搜 procedure search(k:longint); var k1:longint; begin if k=6 then begin inc(total); exit; end; for k1:=1 to 4 do begin b[k]:=k1; if pd(k) then begin search(k+1); b[k]:=0; end; b[k]:=0; end; end; k1是枚举k颜色的量。 pd(k)的意思是位置k上填颜色k1。 b数组是存储颜色的数组。 代码碎片2:判断 function pd(m:longint):boolean; var i2:longint; begin pd:=true; for i2:=1 to 5 do begin if (a[m,i2]=1) and (b[m]=b[i2]) then begin pd:=false; break; end; end; end; 用循环枚举每个区域 (a[m,i2]=1)判断两个区域是否相邻。 (b[m]=b[i2])判断颜色是否相同。 代码碎片3:预处理 for i:=1 to n do begin readln(i1,j1); a[i1,j1]:=1; a[j1,i1]:=1; end; a[i1,j1]:=1; a[j1,i1]:=1; 改成邻接表。 代码拼接 var n,total,i,j,i1,j
您可能关注的文档
最近下载
- 数据通信技术 子网掩码、子网划分、网关 子网掩码与子网划分.ppt VIP
- 柑橘新品种引种表现及栽培技术要点(共字).doc VIP
- 家校社协同育人新范式实施策略.docx
- 美甲店的前景及可行性研究报告.docx
- 班主任计划和总结及班主任手册.doc VIP
- T_CFIAS 3040—2025(混合型饲料添加剂25-羟基胆钙化醇(25-羟基维生素D3)).pdf
- 医疗器械(耗材)项目投标服务实施方案(技术方案).pdf VIP
- 建设工程工程量清单计价规范(GB 50500-2024).docx VIP
- 西门子保护说明书7SJ686用户手册.pdf VIP
- 5.1.3.1生物圈(第一课时) 课件--人教版(2024)生物八年级上册.pptx VIP
原创力文档


文档评论(0)