从边列表构建所有哈密顿路径

2023-12-12

我无法找到从相关元组列表构建树路径的方法?我只想要每个节点被访问一次的每个路径的列表,也称为哈密尔顿路径。

我不断接近,但错过了一些路径。

例如,假设我们有以下连接列表:

connections = [(1, 4), (1, 5), (2, 5), (3, 4), (4, 1), (4, 3), (4, 5), (5, 1), (5, 2), (5, 4)]

期望的输出:

[[1,4,3], [1,4,5,2], [1,5,2], [1,5,4,3], 
 [2,5,1,4,3], [2,5,4,1], [2,5,4,3],
 [3,4,1,5,2], [3,4,5,1], [3,4,5,2], 
 [4, 3], [4,1,5,2], [4,5,1], [4,5,2],
 [5, 2], [5,1,4,3], [5,4,1], [5,4,3]
]

因此,每个可能的路径都会被存储,并且每个节点仅被访问一次:

这是我所拥有的,但缺少很多路径:

def find_paths(current_vertex):
    if current_vertex not in current_path:
        current_path.append(current_vertex)

    possible_next_verticies = [v2 for v1,v2 in connections if v1 == current_vertex]

    # if the current vertex is in the current_path
    if current_vertex in current_path:
        # if all the possible_next_vertices are in the current_path, return
        adjacencies = [v for v in possible_next_verticies if v not in current_path]
        if not adjacencies:
            print "current_path: %s" % current_path
            if current_path not in TESTED_PATHS:
                TESTED_PATHS.append(current_path)
            current_path.remove(current_vertex)
            return

    for next_vertice in possible_next_verticies:
        if next_vertice not in current_path:
            current_path.append(next_vertice)
            find_paths(next_vertice)
            continue
        else:
            continue

    return current_path

好吧,由于我尝试使用的数据结构,我遇到了很多麻烦,因为原始连接图中存在重复项。

更好的是使用这样的数据结构:

connections = {1: [4, 5], 2: [5], 3: [4], 4: [1, 3, 5], 5: [1, 2, 4]} 

那么可以使用以下两种算法https://www.python.org/doc/essays/graphs/

def find_path(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
        return path
    if not graph.has_key(start):
        return None
    for node in graph[start]:
        if node not in path:
            newpath = find_path(graph, node, end, path)
            if newpath: return newpath
    return None

以及完整路径

def find_all_paths(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
        return [path]
    if not graph.has_key(start):
        return []
    paths = []
    for node in graph[start]:
        if node not in path:
            newpaths = find_all_paths(graph, node, end, path)
            for newpath in newpaths:
                paths.append(newpath)
    return paths
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从边列表构建所有哈密顿路径 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • MySQL-Win10升级后Wamp服务器无法工作

    我刚刚升级到 Windows 10 升级后我的 MySQl 未启动 wamp 服务器图标橙色 我可以看到 Apache 服务器正在运行 但 MySQL 未运行 请帮忙 Thanks 解决了 这对我有用 我去了 wamp bin mysql
  • 将字符串中读取的输入列表转换为Python中的列表

    我正在阅读一个包含列表的文件 下面是输入文件 1 2 3 4 42 1 1 2 3 5 8 现在 如您所见 有一些列表被读取为字符串字符 我正在尝试将其转换为实际列表 下面是我正在使用的代码 list list sys stdin read
  • 通过 localstack 中的 SES 发送电子邮件,事件目的地带有 sns 主题,不起作用

    当在 localstack 中使用 SES 触发电子邮件时 我试图在队列中接收消息 SES 服务正在使用连接到 SNS 主题的事件目标 SNS主题连接到一个队列 我想在其中接收跳出 点击信息 步骤如下 1 whitelist email s
  • Quartz 2.2 多调度器和@DisallowConcurrentExecution

    请考虑这个例子 示例 Web 应用程序调用scheduler start 在其启动时 调度程序配置为将其作业存储在数据库中 该应用程序被复制到六个网络服务器上 因此 如果我们启动六个 Web 服务器 我们将在单个数据库上拥有六个具有相同名称
  • JavaScript - 比较两个多维数组

    我有两个多维数组 首先是类似的东西 one one three four five five one one one 第二个是这样的 one one nine one one one two two two two two 现在 我想要的是
  • 将现有资源导入 Terraform 状态文件时出错

    我正在尝试重构我的一些模块 这需要我将现有资源移动到不同的状态文件中 通常导入资源是单调但简单的 我不知道如何解释以下内容 路径段的数量不能被2整除 尝试导入任何这些资源时出错 我尝试导入的所有资源都会发生这种情况 我过去已经成功完成过多次
  • IE8 - 如何在内容加载后运行 jquery 代码?

    我遇到一种情况 我加载一个父网页 恰好是 Java JSP 其中包含我正在文档就绪函数内部使用 ajax 异步 加载的内容 期望页面能够快速呈现任何内容 然后运行 jquery 代码页面显示后执行异步工作 它的工作方式与 Firefox 中
  • SQL 多个参数值

    SQL 2005 中有哪些选项可用于将多个值传递给存储过程 伪代码 在 C 代码中 List
  • 相机使用自定义相机预览渲染器不清楚

    我使用以下链接使用自定义渲染器显示相机预览https developer xamarin com guides xamarin forms application fundamentals custom renderer view I wa
  • 如何限制图片上传大小小于2mb?

    我有一个 htmlselect上传图像的选项 div class row smallMargin div class col sm 6 Attach Image div div class col sm 6 div div
  • 如何从hibernate+spring应用程序将csv文件导入mysql?

    我想将 csv 文件导入到 mysql 表中 我进行导入的原因是因为我有很多大文件 这些文件会在短时间内发送到我的服务器 尝试使用 java 逐行添加 但遇到了一堆不同的错误 例如休眠异常或 java 挂起 如果文件是 太大 导入速度非常快
  • ForEach - 打印项目和数值[重复]

    这个问题在这里已经有答案了 如何实现显示每个数组成员以及取决于列表计数的数值的 ForEach 结果 该数值会针对每个项目递增 例子是 1 火鸡 2 火腿 3 梅奥 struct EditorDirections View State pr
  • 4 列 CSS 布局 - 流体

    我正在绕圈子试图解决这个问题 HTML CSS div div class inner box clearfix div div div div
  • 获取点击的图片框数组的索引

    我正在动态创建一些图片框并单击图片框的事件 如下所示 Image myImage Image FromFile image Untitled6 png PictureBox txtTeamNames new PictureBox 5 for
  • 用于下载文档的 Alfresco REST API

    我想使用 Afresco REST API 下载文档 经过一番研究 我发现了这个 REST API alfresco s api node content property store type store id id 但我不知道如何传递参
  • 如何从servlet调用JavaScript函数

    我是网络开发新手 我有一个外部 JavaScript 文件 其中包含一个要显示的函数 包含错误详细信息的提示 我需要将错误消息传递给函数 我已经在servlet中编写了控制器 如何从我的 servlet 调用该 JavaScript 文件的
  • 处理退出状态 popen python

    我试图用 popen 处理状态退出 但它给出了一个错误 代码是 import os try res os popen ping c 4 www google com except IOError print ISPerror popen t
  • 奇怪的单元格地址非连续范围的行为:VBA

    我试图回答这个问题当我在 Excel 中遇到一些奇怪的 VBA 行为时 我写了一个非常简单的子程序来演示这个问题 Sub debugAddresses rng As Range Debug Print Whole range rng Add
  • 从 Android 中的通知开始新活动

    我想从状态栏通知启动一个活动 A 当活动 A 已经在前面时 我想完成该活动并重新启动活动 A 我该怎么做 查看有关创建状态栏通知的文档 这绝对涵盖了使用 Intent 和 PendingIntent 从通知启动和 Activity http
  • 从边列表构建所有哈密顿路径

    我无法找到从相关元组列表构建树路径的方法 我只想要每个节点被访问一次的每个路径的列表 也称为哈密尔顿路径 我不断接近 但错过了一些路径 例如 假设我们有以下连接列表 connections 1 4 1 5 2 5 3 4 4 1 4 3 4