当前位置: 首页 > news >正文

亳州做网站的公司/百度seo在哪里

亳州做网站的公司,百度seo在哪里,ie常用网站设置,国外购物平台我正在尝试编写一个函数,该函数将正整数n作为输入,并将整数1到n按顺序排列,以使每个相邻数字的总和为一个完美的平方(如果存在这样的顺序)。我意识到,如果创建一个图形,其中顶点是数字,并且如果两个顶点的和…

我正在尝试编写一个函数,该函数将正整数n作为输入,并将整数1到n按顺序排列,以使每个相邻数字的总和为一个完美的平方(如果存在这样的顺序)。我意识到,如果创建一个图形,其中顶点是数字,并且如果两个顶点的和是一个完美的正方形,则两个顶点之间会有一条边,那么这个问题就相当于试图在图形中找到一个哈密顿路径。因此,我试图编写一个函数,该函数将在给定图中查找汉密尔顿图(如果存在)。这是我的代码:

defhampath_finder(moves,start,path=None):ifpathisNone:path=[]iflen(path)==bound:returnpathifnotpath:path=path+[start]forcandidateinmoves[start]:ifcandidatenotinpath:path=path+[candidate]new_path=hampath_finder(moves,candidate,path)ifnew_path:returnnew_pathelse:continueelse:returnNonereturnNone

“ Moves”是图形的字典(已经使用了变量“ graph”,并且我不太擅长为变量命名),其中每个顶点都是一个键,每个键的值是一个列表,其中包含与该顶点相邻的其他顶点关键顶点。例如,当输入为15时,这是字典:

{1:[3,8,15],2:[7,14],3:[1,6,13],4:[5,12],5:[4,11],6:[3,10],7:[2,9],8:[1],9:[7],10:[6,15],11:[5,14],12:[4,13],13:[3,12],14:[2,11],15:[1,10]}

起点是哈密顿路径的起点。(我尝试编写此函数时没有起点,因此该函数本身会将每个点都作为起点,但是它变得很复杂。现在,我自己自己遍历所有顶点。)

我知道对于数字15,应该给我以下列表:

[9,7,2,14,11,5,4,12,13,3,6,10,15,1,8]

但是,它给了我这个列表:

[9,7,2,14,11,5,4,12,13,3,1,8,15,10,6]

考虑到该函数的工作方式,我意识到,一旦达到1,它将首先加8作为下一个数字。但是,8在除1之外的顶点之间没有任何边。老实说,我不知道接下来会做什么。我意识到,一旦没有可能的候选人可以尝试,就需要回溯并回到最后的正常位置。我不知道该如何实现。

我该如何解决这个问题?另外,如何改善我的代码?

我对Python还是很陌生,所以如果这个问题不重要或我的代码很糟糕,我深表歉意。

编辑:我想我已经解决了主要问题,它现在返回正确的列表。这是新的代码:

defhampath_finder(moves,start,path=None):ifpathisNone:path=[]iflen(path)==bound:returnpathifnotpath:path=path+[start]forcandidateinmoves[start]:ifcandidatenotinpath:new_path=hampath_finder(moves,candidate,path+[candidate])ifnew_path:returnnew_path

我认为问题在于,一旦我们走到了尽头,错误的路径已经被追加到列表中path,这就是为什么在先前代码的输出中有8的原因。

现在,问题在于该函数None在返回列表之后返回。因此,这是我为数字15运行此函数时的输出,即图形是我之前提到的字典:

[8,1,15,10,6,3,13,12,4,5,11,14,2,7,9]None

如何解决此问题,使其不返回None?顺便说一句,我仍然必须自己尝试每个数字作为起点。这是我的工作:

fornumberinrange(1,16):ifhampath_finder(moves,number):print(hampath_finder(moves,number))

换句话说,我必须手动尝试将每个数字作为路径的开头。如何调整原始功能,使其不需要起点,并尝试所有可能的数字?

此外,即使数量很少,此功能也要花费很长时间。如何提高效率?

编辑:我意识到,包括整个函数而不是仅包含汉密尔顿路径部分会更有帮助,因为否则某些变量是不确定的。

frommathimportsqrtdefadjacent_square(bound):defblueprint(bound):graph={}fornumberinrange(1,bound+1):pos_neighbours=[]forcandidateinrange(1,bound+1):ifsqrt(number+candidate)==int(sqrt(number+candidate))andnumber!=candidate:pos_neighbours.append(candidate)graph[number]=pos_neighboursreturngraph

graph=blueprint(bound)defhampath_finder(mapping,start,path=None):ifpathisNone:path=[]iflen(path)==bound:returnpathifnotpath:path=path+[start]forcandidateinmapping[start]:ifcandidatenotinpath:new_path=hampath_finder(mapping,candidate,path+[candidate])ifnew_path:returnnew_pathfornuminrange(1,bound+1):ifhampath_finder(graph,num):print(hampath_finder(graph,num))breakelse:print("No such order exists.")

该函数blueprint通过检查每个可能的对的总和来创建图形。我已经解释过了hampath_finder。之后,我尝试使用for循环将每个数字作为路径的起点。

解决方案

我认为您得到的原因None是因为在hampath_finder函数中您仅返回一个值if new_path:。如果没有新路径且函数返回,则Python将返回None。您可以通过以下示例看到这一点:

deftestfunct(test):iftest:returnTrueprint(testfunct(False))

>>>None

此外,您要计算两次hampath_finder。一次查看是否存在,然后再次打印。我将更改您的代码的这一部分:

fornuminrange(1,bound+1):ifhampath_finder(graph,num):print(hampath_finder(graph,num))break

要更像这样:

fornuminrange(1,bound+1):this_path=hampath_finder(graph,num)iflen(this_path)>0:print(this_path)break

这将有助于少量的速度。

However, a cursory look at the Hamiltonian Path Problem looks like it is an NP-Complete problem. So it is going to be very slow. There are some research papers that have faster implementations that are out of the scope of StackOverflow. Also, if speed is necessary, then you will probably want to switch the implementation to something like C or C++.

http://www.jmfq.cn/news/4860325.html

相关文章:

  • wordpress自定义筛选/seo实战培训教程
  • 沈阳企业网站建设/南宁百度seo排名
  • 晨旭东方网站建设/网页推广怎么收取费用
  • wordpress footer copyright/山西seo基础教程
  • 泵阀网站建设/西安seo托管
  • 安庆 网站建设/百度广告公司联系方式
  • 做网站如何上传/网站检测中心
  • 郑州文化企业设计公司/厦门谷歌seo公司有哪些
  • 汕头怎么进行关键词优化/seo推广论坛
  • 网站建站多钱/搜索引擎营销是指
  • 百度网址ip/商品seo关键词优化
  • wordpress纯静态网站/在线生成个人网站
  • 做视频网站需要执照吗/活动推广朋友圈文案
  • 网站开发团队人员/广告平台推广渠道
  • 苏州网站建设网站建设/营销软文范例大全300字
  • 中国做网站公司排名/百度关键词优化怎么做
  • 做网站时点击显示/流量宝
  • 做网站官网需多少钱/百中搜
  • 学什么专业可以做网站/网站推广优化流程
  • 济南市历下区建设局官方网站/百度号码认证
  • 做任务免费领取东西的网站/安徽网站推广
  • 淄博百度网站制作/网页制作工具有哪些
  • 把网站内容全删掉 在重新建立会不会被k/5118网站如何使用免费版
  • 电影里的做视频在线观看网站/百度登录页面
  • java网站开发面试题/全自动推广引流软件
  • app网站开发价格/怎么免费建公司网站
  • wordpress安装编辑器/上海网站快速排名优化
  • 网站制作工作室/电子商务推广方式
  • 登录注册页面模板/好口碑关键词优化
  • wordpress怎样发询盘/百度关键词优化软件如何