大一python期末复习综合题

2023-11-01

目录

前言

问题1:阶层函数

问题2:文件读取

问题3:嵌套循环

问题4:求最短路径

问题4.1:路径长度

问题4.2:最短路径

问题4.2.1:列表添加元素

问题4.2.2:返回最短路径

问题5:绘图

问题5.1:绘制城市坐标散点图

问题5.2:绘制路径图


前言

本题涵盖的知识点主要包括嵌套列表,文件读取和处理,绘图。

TSP,即旅行商问题,又称TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一。假设有一个旅行商人要拜访N个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。下面将通过几个子问题以循环的方式解决TSP问题。

显然,起始点的选择不会影响路径长度。

例如:

A,B两个城市,路径为A--->B--->A

A,B,C三个城市,路径为A--->B--->C--->A,A--->C--->B--->A

A,B,C,D四个城市,路径有A--->B--->C--->D--->A,A--->B--->D--->C--->A,A--->C--->B--->D--->A,A-->C--->D--->B--->A,A--->D--->B--->C--->A,A--->D--->C--->B--->A,共有6条路径。

不加证明的给出当城市个数为n,路径总数为(n-1)!

这是题目所需的文件:

链接:https://pan.baidu.com/s/1u_ZBqbt_0odQwB0NT2eTJA?pwd=6666 
提取码:6666

链接:https://pan.baidu.com/s/1lmAVdwCgfdi1NEMUuyqZPw?pwd=6666 
提取码:6666

这是文章所有内容的压缩包:

链接:https://pan.baidu.com/s/1qOUmBJCoio7a6DMJyfEeXw?pwd=6666 
提取码:6666

问题1:阶层函数

请定义阶层函数 f(n),n>=2,返回城市个数的方案数(n-1)!

例如

>>> f(2)

1

>>> f(4)

6

>>> f(10)

362880

#问题1
#********* Begin *********#
def f(n):
    if n==2:
        return 1
    else:
        return (n-1)*f(n-1)
#********* End *********#

问题2:文件读取

请定义函数read()(无输入参数),读取文件中储存的n个城市的地址(n>=2),要求返回n*2的嵌套列表。文件格式第一列为横坐标,第二列为纵坐标。

注:

关于文件地址的获取:鼠标右键复制文件地址会返回:"C:\Users\username\Desktop\city_location.txt"这样一个字符串。

例如:

读取文件前六行时:(每行中间以四个空格隔开)

1304 2312

3639 1315

4177 2244

3712 1399

3488 1535

3326 1556

返回的列表:

[[1304, 2312],

 [3639, 1315],

 [4177, 2244],

 [3712, 1399],

 [3488, 1535],

 [3326, 1556]]

提示:注意\n的处理

#问题2
from pprint import pprint

#********* Begin *********#  
def read():
    infile=open(r"C:\Users\hqh\Desktop\1.txt",'r').readlines()
    n=len(infile)
    l=[0]*n
    for i in range(n):
        l[i]=[eval(j) for j in infile[i].replace('\t',' ').replace('\n','').split()]
    return l
#********* End *********#
location=read()
pprint(location[0:6])

问题3:嵌套循环

请定义distance(location)函数,location是问题二中read()的返回值,是一个n*2嵌套列表即n个城市的坐标。要求返回n*n列表dist,dist[i][j]表示第i到第j个城市的距离。

提示:dist[i][i]=0;dist[i][j]=dist[j][i]

例如:以问题二返回值为location

[[0.0,

  2538.943481056638,

  2873.8046210555094,

  2575.27338354591,

  2318.0994370388858,

  2158.707946897866],

 [2538.943481056638,

  0.0,

  1073.53854145997,

  111.28791488746656,

  266.83515510516975,

  395.03164430207363],

 [2873.8046210555094,

  1073.53854145997,

  0.0,

  964.4946863513557,

  988.6364346917425,

  1094.3239922436135],

 [2575.27338354591,

  111.28791488746656,

  964.4946863513557,

  0.0,

  262.0534296665472,

  416.70733134899365],

 [2318.0994370388858,

  266.83515510516975,

  988.6364346917425,

  262.0534296665472,

  0.0,

  163.35544068074378],

 [2158.707946897866,

  395.03164430207363,

  1094.3239922436135,

  416.70733134899365,

  163.35544068074378,

  0.0]]

#问题3
#********* Begin *********#  
def distance(l):
    n=len(l)
    dist=[[0]*n for i in range(n)]
    for i in range(n):
        for j in range(i,n):
            dist[i][j]=((l[i][0]-l[j][0])**2+(l[i][1]-l[j][1])**2)**0.5
            dist[j][i]=dist[i][j]
    return dist
#********* End *********#
pprint(distance(location[0:6]))

问题4:求最短路径

问题4.1:路径长度

请定义函数length(way),way是传入的1*n列表,里面是0~(n-1)的一个排列,即路径,最后会返回出发点,要求函数返回路径和,

若代码正确则会输出如下:

[7161.093526113121, 7438.587165121758]

提示:可以利用问题3的dist进行计算

#问题4.1
#********* Begin *********#
dist=distance(location)  #请在左侧为dist赋值
def length(way):
    l=dist[way[0]][way[-1]]
    for i in range((len(way)-1)):
        l+=dist[way[i]][way[i+1]]
    return l
#********* End *********#
print([length([0,1,2,3,4,5]),length([0,1,2,4,3,5])])

问题4.2:最短路径

由前面定义的阶层函数f(n)知路径总数为(n-1)!,而初始点的选择对结果没有影响,故默认以第n个城市为起点,关于0~(n-2)(索引值,对应第1个到(n-1)个城市)的全排列代码已给出,并储存在(n-1)!*(n-1)列表ways中。

例如,n=4,ways是0-2的全排列,ways=[[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]]

问题4.2.1:列表添加元素

ways是0~(n-2)的全排列,请你把n-1添加至ways每一个子列表开头,以上为例,添加元素后的ways=[[3, 0, 1, 2], [3, 0, 2, 1], [3, 1, 0, 2], [3, 1, 2, 0], [3, 2, 0, 1], [3, 2, 1, 0]]

提示:这是添加到子列表开头不是末尾

#问题4.2.1

import itertools
n=len(dist)
nums = list(range(n-1))
ways= [list(i) for i in list(itertools.permutations(nums))]

#********* Begin *********#
ways=[[n-1]+i for i in ways]
#********* End *********#

问题4.2.2:返回最短路径

在问题4.2.1的基础上,遍历所有方案并返回最短路径对应的方案bestway,bestway是一个1*n的列表。

提示:你可以使用length(way)帮助你解决问题

#问题4.2.2
#********* Begin *********#
def best(ways):
    lways=[length(i) for i in ways]
    bestway=ways[lways.index(min(lways))]
    return bestway
#********* End *********#
bestway=best(ways)

问题5:绘图

请在同一张画布上绘制1*2两个子图,相关的库已经导入

问题5.1:绘制城市坐标散点图

请在第一个子图中绘制城市坐标散点图,函数已经定义,无返回值。要求:标题为”城市坐标散点图”,图例为”citylocation”。你无需添加show语句。

提示:plt.scatter(x,y)会绘制相应坐标的散点图

提示:在输入图例的时候传入的字符串应当储存在列表中,例如图例为a时,传入为[a]

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']#显示中文标签

#问题5.1
def p1():
    #********* Begin *********#
    x=[i[0] for i in location]
    x.append(x[0])
    y=[i[1] for i in location]
    y.append(y[0])
    plt.subplot(1,2,1)
    plt.scatter(x,y)
    plt.title('城市坐标散点图')
    plt.legend(['citylocation'])
    #********* End *********#
p1()

问题5.2:绘制路径图

请在第二个子图中根据问题4求得的最短路径bestway绘制路径图,要求:标题为”最佳路径”,图例为”bestway”,线型要求为 ’r*-’。你无需添加show语句。

注意:终点和起点需要连接

提示:subplot(m,n,p)表示在有m*n个子图的画布上绘制第p张子图

当输入文件是1时输出如下

 当输入文件是2时输出如下:

 

#问题5.2
def p2():
    #********* Begin *********#
    x=[location[i][0] for i in bestway]
    x.append(x[0])
    y=[location[i][1] for i in bestway]
    y.append(y[0])
    plt.subplot(1,2,2)
    plt.plot(x,y,'r*-')
    plt.legend(['bestway'])
    plt.title('最佳路径')
    #********* End *********#
p2()
plt.show()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大一python期末复习综合题 的相关文章

随机推荐

  • xml系列篇之xml解析

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于xml的相关操作吧 目录 Welcome Huihui s Code World 是什么 为什么要使用 优点 辉辉小贴士 xml在数据库辅助类中的应用 辉辉小
  • QListWidget的查找项方法findItems的使用(Python)

    QListWidget的查找项方法findItems的使用 Python 在PyQt中 QListWidget是一个用于显示列表视图的控件 它允许用户查看和选择其中的项 QListWidget提供了一些方便的方法 用于在列表中查找特定的项
  • Cadence设计原理图常用导出方案

    电路工作到了后期需要汇报或者写文章需要设计原图 这里整理一下Cadence设计原理图常用导出方案 前期工具用的好 后期处理没烦恼 Cadence自带工具其实很强大 只是你没尝试用 仿真环境 虚拟机Linux下Cadence617 原理图绘制
  • 手把手教你走进Hyperledger Fabric

    现在 Blockchain是业内新的热门话题 但是 寻找良好的资源来学习这项引人入胜的技术并不是一件容易的事 为了让其他人更容易学习 我开始在区块链和分布式分类帐技术 DLT 平台领域开展一系列工作 我将尽力涵盖每一步都需要掌握这些技术 首
  • 普通用户编译安装升级make(gmake)

    问题 编译安装glibc时报错提示make的版本低 需要手动编译安装 网上的资料大多是用管理员权限安装 然后修改系统环境 但是我只有普通用户的权限 将过程记录下来 下载 编译安装 wget https ftp gnu org gnu mak
  • Windows 环境解压 zip 压缩包乱码问题

    前言 最近在接受他人上传的 ZIP 压缩包时 发现解压后文件名出现了乱码 记得自己很久以前似乎把系统的编码改为了 UTF 所以盲猜是压缩包发送人的系统使用了 GBK 编码 出现了错误 正文 探索 搜了一下 发现了知乎上一个很好的回答如下 基
  • 刷脸比手机支付具便利性使用起来放心

    随着人工智能的成熟 更多智能化融入到日常生活中 支付行业在智能的浪潮下有了翻天复地的变化 由传统支付到新型支付 再到人工智能 由传统钱包到手机钱包 由手动数钱到指纹识别 每个迭代周期超乎我们的想象 就支付行业中国已经在全世界领先地位 在很多
  • 用jquery怎样获取input标签中name、type等属性值

    input text attr name input text prop name 也可以使用prop 方法获取属性
  • 路由器相关总结

    一 何为路由器 路由器是指主要负责OSI参考模型中网络层的处理工作 并根据路由表信息在不同网络之间转发IP分组的网络硬件 这里的网络一般是指IP子网 也可以称广播域 二 OSI参考模型与所对应的网络硬件 三 路由器的必要性 在某个组织的内部
  • Xen Server 7.0 一直无法退出维护模式

    起因 非关机后自动进入维护模式无法退出 提示服务器正在使用 查看当前虚拟机列表 7 0 要用 xl 发现没有任何虚拟机 root xenserver xl vm list 尝试强制关闭所有虚拟机 root xenserver xe vm r
  • 0欧姆电阻在电路中的作用

    转载 http bbs eetzone com thread 147 1 1 html 总的来说0欧姆电阻有以下几个功能 在电路中没有任何功能 只是在PCB上为了调试方便或兼容设计等原因 可以做跳线用 如果某段线路不用 直接不贴该电阻即可
  • Spring Boot Dubbo Zookeeper(含ZK安装脚本)

    文章目录 Spring Boot Dubbo Zookeeper 含ZK安装脚本 简介 Dubbo Common Provider Consumer Zookeeper Spring Boot Dubbo Zookeeper 含ZK安装脚本
  • FISCO BCOS简介

    FISCO BCOS是由国内企业主导研发 对外开源 安全可控的企业级金融联盟链底层平台 由金链盟开源工作组协作打造 并于2017年正式对外开源 社区以开源链接多方 截止2020年5月 汇聚了超1000家企业及机构 逾万名社区成员参与共建共治
  • 如何在linux服务器部署pgsql,安全版以及可能出现各种问题解决(保姆级教程)

    文章目录 准备 一 安装 二 配置环境变量 1 切换用户 2 修改配置文件 三 建立数据库 四 设置监听 总结 准备 提示 市面上那些在linux服务器部署pgsql好多都是水货 效果良莠不齐 笔者花了两天时间成功部署了pgsql 记录下方
  • 【华为OD机试真题2023B卷 JAVA&JS】非严格递增连续数字序列

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 非严格递增连续数字序列 知识点字符串 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 输入一个字符串仅包含大小写字母和数字 求字符串中包含的最长的非严格递增连续数字序列
  • gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_wireshark分析(传输层,网络层,链路层)...

    wireshark抓包软件总是友善地帮包分层 1 链路层 Ethernet II协议即以太网协议 以太网帧的格式如下 这里的地址指的是MAC地址 每一个网卡对应唯一的MAC 类型指的是IP ARP CRC效验数据是否异常 在wireshar
  • shell脚本-cp命令复制目录报错cp: omitting directory

    cp 复制目录报错 如下 报错原因 cp命令默认是不能复制目录的 需要加参数 解决办法 使用cp r命令进行复制 递归处理 将指定目录下的所有文件与子目录一并处理 拓展 cp语法 cp 选项 参数 a 此参数的效果和同时指定 dpR 参数相
  • Sina实时股票数据接口大全

    From http blog csdn net ablo zhou article details 4283320 实时股票数据接口大全 股票数据的获取目前有如下两种方法可以获取 1 http javascript接口取数据 2 web s
  • 【R语言】期末考试五道题

    question1 setwd G Rexam20174710426 a lt 2 b lt 0 c lt 1 d lt 7 e lt 4 f lt 7 g lt 1 h lt 0 i lt 4 j lt 2 k lt 6 o lt NA
  • 大一python期末复习综合题

    目录 前言 问题1 阶层函数 问题2 文件读取 问题3 嵌套循环 问题4 求最短路径 问题4 1 路径长度 问题4 2 最短路径 问题4 2 1 列表添加元素 问题4 2 2 返回最短路径 问题5 绘图 问题5 1 绘制城市坐标散点图 问题