tsp可视化python

随机生成点的坐标并依据点集生成距离矩阵,通过点的坐标实现可视化

c代码看我的这篇文章tsp动态规划递归解法c++

from typing import List, Tuple
import matplotlib.pyplot as plt
from random import randintN: int = 4
MAX: int = 0x7f7f7f7fdistances: List[List[int]] = [[0 for _ in range(N)] for _ in range(N)]
path: List[List[int]] = [[0 for _ in range(1 << (N - 1))] for _ in range(N)]
dp: List[List[int]] = [[0 for _ in range(1 << (N - 1))] for _ in range(N)]
points: List[Tuple[int, int ]]def creatDistances():global distances, dp# for i in range(N):#     for j in range(N):#         if i == j:#             distances[i][j] = MAX#         else:#             temp = randint(1, 10)#             while temp == 0:#                 temp = randint(1, 10)#             distances[i][j] = temp# x=[[MAX, 3, 6, 7],#    [5, MAX, 2, 3],#    [6, 4, MAX, 2],#    [3, 7, 5, MAX]]# for i in range(N):#     for j in range(N):#         distances[i][j] = x[i][j]creatpoints()for i in range(N):dp[i][0] = distances[i][0]def printDistances():global distancesprint("代价矩阵为:")for i in range(N):for j in range(N):if distances[i][j] == MAX:s = "INF"print(f"{s:<17}", end=" ")else:print(f"{distances[i][j]:<17}", end=" ")print()for i, point in enumerate(points):plt.text(*point, f'{i }', fontsize=12, ha='center', va='bottom')plt.scatter(*zip(*points))def removeCity(j: int, k: int) -> int:return j - (1 << (k - 1))def printPath(i: int, j: int) -> None:if j != 0:print(f"{i} -> ", end="")next_city = path[i][j]plt.plot((points[i][0],points[next_city][0]), (points[i][1],points[next_city][1]))printPath(next_city, removeCity(j, next_city))else:print(f"{i} -> {0}")plt.plot((points[i][0],0), (points[i][1],0))def creatpoints() ->None:ldasc: int = 1hdasc: int = 10dapr: int = N - 1global pointspoints = [(0,0)]+[(randint(ldasc, hdasc), randint(ldasc, hdasc)) for i in range(dapr)]for i in range(N):for j in range(i, N):if i == j:distances[i][j] = MAXelse:distances[i][j] = distances[j][i] = ((points[i][0]-points[j][0])**2+(points[i][1]-points[j][1])**2)**.5
def drewpoints() ->None:global pointsdef TSP(v: int, s: int) -> int:global distances, dp, pathif dp[v][s] != 0:return dp[v][s]min = MAXfor k in range(1, N):if ((s >> (k - 1)) & 1) == 1:t = TSP(k, removeCity(s, k))if (t + distances[v][k]) < min:min = t + distances[v][k]path[v][s] = kdp[v][s] = minreturn minif __name__ == "__main__":creatDistances()printDistances()print(f"最短距离为:{TSP(0, (1 << (N - 1)) - 1)}")print("最短路径为:")printPath(0, (1 << (N - 1)) - 1)print(points)plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 953 (Div. 2) A - C 题解

因为有事只做了A-C&#xff0c;都比较简单&#xff0c;全是很简单的思维&#xff0c;明天有空还会添加上D&#xff0c;如果有人需要可以明天常来看看&#xff01; 进入正题&#xff1a; A. Alice and Books 题意&#xff1a;给你n个数字&#xff0c;将这些数字分到两堆里&am…

杂谈-Android和Ios的对比

在当前的智能手机市场中&#xff0c;Android和iOS两大操作系统占据了主导地位。它们各自拥有独特的优势和劣势&#xff0c;为用户提供了不同的使用体验和选择。以下是对Android和iOS系统优缺点的详细对比&#xff0c;旨在帮助用户更全面地了解两大系统。 一、Android系统 优点…

Hadoop生态圈中的各个组件的介绍

hdfs namenode 维护目录树&#xff0c;维护命名空间。负责确定指定的文件块到具体的Datanode结点的映射关系。&#xff08;在客户端与Datanode之间共享数据&#xff09;管理Datanode结点的状态报告 datanode 负责管理它所在结点上存储的数据的读写&#xff0c;及存储数据。…

【Android面试八股文】你来说一说Java对象是如何晋升为老年代的?

文章目录 一、对象年龄达到阈值1.1 演示过程1.2 结论二、大对象直接进入老年代三、分配担保机制空间分配担保为什么要进行空间担保 ?`Minor Gc`后的对象太多无法放入`Survivor`区怎么办?如果`Minor gc`后新生代的对象都存活下来,然后需要全部转移到`老年代`,但是老年代空间…

@AliasFor 使用

AliasFor 使用 AliasFor 它允许开发者为一个注解的属性指定别名。通过使用AliasFor&#xff0c;我们可以提供多个名称来引用同一属性&#xff0c;从而增加了代码的灵活性和可读性 定义一个注解 package com.example.demo.aspect;import org.springframework.core.annotation…

asyncio协程提高执行效率

from fastapi import FastAPI import asyncioapp FastAPI()async def task1():# 模拟执行任务1print("开始执行任务1")await asyncio.sleep(1)print("结束执行任务1")return "Result from Task 1"async def task2():# 模拟执行任务2print("…

论文阅读笔记(通道注意力)

论文阅读笔记&#xff08;通道注意力&#xff09; 摘要Abstract1. SENet1.1 研究背景1.2 创新点1.3 SE块的构建过程1.3.1 注意力和门机制1.3.2 SE块具体运行过程1.3.3 通道间依赖关系的提取1.3.4 自适应重新校正(Excitation) 1.4 SE结合先进架构的灵活应用1.5 实验1.6 模型的实…

软考初级网络管理员__操作系统单选题

1.使用Windows提供的网络管理命令(请作答此空)可以查看本机的路由表&#xff0c;()可以修改本机的路由表。 tracert arp ipconfig netstat 2.在Windows 的命令行窗口中键入命令C:\>nslookupset type MX>202.30.192.2这个命令序列的作用是查询()。 邮件服务器信息 …

视频信号发生器上位机

在液晶屏测试、电视机信号测试、视频处理器测试中&#xff0c;经常需要使用视频信号发生器&#xff0c;市场上专业的视频信号发生器通常需要大几千元&#xff0c;多则上万元&#xff0c;而且设备测试仪器是一套硬件&#xff0c;没有办法像软件一样复制传播。所以我开发了一套基…

抖音混剪素材哪里找?可以混剪搬运视频素材网站分享

在抖音上制作精彩的视频离不开高质量的素材资源。今天&#xff0c;我将为大家推荐几个优质的网站&#xff0c;帮助你解决素材短缺的问题。这些网站不仅提供丰富的素材&#xff0c;还符合百度SEO优化的规则&#xff0c;让你的视频更容易被发现。 蛙学府素材网 首先要推荐的是蛙…

k8s可练习实验分享

实验环境介绍&#xff1a;单master节点&#xff0b;3node节点 环境已提前配置完毕&#xff0c;如果你环境还未做&#xff0c;请移步 k8s集群V1.27.3安装 在 k8s 上可以做许多实验来提升你的动手能力和理解。以下是一些常见且有用的实验项目&#xff1a; 1、部署一个简单的应用…

需求:如何给文件添加水印

今天给大家介绍一个简单易用的水印添加框架&#xff0c;框架抽象了各个文件类型的对于水印添加的方法。仅使用几行代码即可为不同类型的文件添加相同样式的水印。 如果你有给PDF、图片添加水印的需求&#xff0c;EasyWatermark是一个很好的选择&#xff0c;主要功能就是传入一…

【iOS】自定义cell及其复用机制

文章目录 cell的复用注册非注册两者的区别 自定义cell cell的复用 当用户滚动 UITableView 或 UICollectionView 时,只有少量可见的 cell 会被实际创建和显示。对于那些暂时不可见的 cell,系统会将它们缓存起来以备将来复用。这就是所谓的 cell 复用机制。 为什么需要cell的复…

英语学习笔记37——Making a bookcase

Making a bookcase 做书架 词汇 Vocabulary work v. 工作 ing形式&#xff1a;working 搭配&#xff1a;work on 工作 做……工作    work for 人 为……而工作 例句&#xff1a;我正在做我的家庭作业。    I am working on my homework.    我正在为Bobby工作。 …

Android集成高德天气API 天气预报

1.新建工程项目WeatherForecast。 2.在AndroidManifest文件中添加网络访问相关权限。 <uses-permission android:name"android.permission.INTERNET"/> 3.设计页面布局activity_main.xml&#xff0c;界面效果如图所示。 4.注册高德开放平台&#xff0c;查阅…

室内定位技术解析:蓝牙信标在室内导航中的应用

室内定位技术&#xff0c;作为现代导航领域的重要突破&#xff0c;解决了GPS在室内空间定位的局限&#xff0c;为我们提供了一种全新的空间认知和利用方式。本文将以蓝牙技术为例&#xff0c;深入解析室内定位的工作原理、关键技术和系统构成&#xff0c;以及在现代导航中的应用…

vue关于:deep穿透样式的理解

情况一 子组件&#xff1a; <div class"child"><div class"test_class">test_class<div class"test1">test1<div class"test2">test2</div></div></div></div>父组件&#xff1a; …

微服务架构思考

时间&#xff1a;2024年06月16日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a; https://xima.tv/1_HvQZkj?_sonic0https://xima.tv/1_HvQZkj?_sonic0 大家好&#xff0c;欢迎来到小蒋聊技术&#xff0c…

LVS ipvsadm命令的使用(二)

目录 上篇&#xff1a;负载均衡集群&#xff08;一&#xff09;-CSDN博客 命令参数概述 调度算法 基本命令 1. 添加虚拟服务器 2. 添加真实服务器 3. 删除虚拟服务器 4. 删除真实服务器 5. 列出当前配置 6. 修改服务器权重 7.保存规则 8. 清除所有配置 进行增加虚拟…

FPGA----petalinux开机启动自定义脚本/程序的保姆级教程

1、petalinux的重启命令&#xff1a;reboot、关机命令&#xff1a;shutdown -h now、开机按键&#xff1a;在关机后&#xff0c;ZCU106的右上角指示灯会变为红色&#xff0c;此时按下左上角第一个按键可启动操作系统。 2、好久没写博客了&#xff0c;本次给大家带来的是petalin…