# 校园导航系统
import heapq
import turtle as t
graph = {
'后勤服务楼': {'西苑': 3, '文体中心': 5},
'西苑': {'后勤服务楼': 3, '操场': 3, '文体中心': 3},
'操场': {'文体中心': 1, '南门': 4, '文理大楼': 2, '西苑': 3},
'文体中心': {'南门': 4, '操场': 1, '西苑': 3, '后勤服务楼': 3},
'南门': {'文理大楼': 6, '图书馆': 7, '文体中心': 4, '操场': 4},
'文理大楼': {'计算机学院楼': 5, '图书馆': 3, '南门': 6, '操场': 2},
'计算机学院楼': {'图书馆': 5, '北苑': 7, '文理大楼': 5},
'图书馆': {'海韵湖': 1, '南门': 7, '文理大楼': 3, '计算机学院楼': 5},
'海韵湖': {'北苑': 1, '图书馆': 1},
'北苑': {'海韵湖': 1, '计算机学院楼': 7}
} # 地点及地点间距离信息
def dt():
nodes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
node_positions = {
'0': ((-200, 120), '后勤服务楼'),
'1': ((-120, 200), '西苑'),
'2': ((-70, 80), '操场'),
'3': ((-90, 50), '文体中心'),
'4': ((-30, -80), '南门'),
'5': ((0, 80), '文理大楼'),
'6': ((100, 170), '计算机学院楼'),
'7': ((100, 50), '图书馆'),
'8': ((150, 160), '海韵湖'),
'9': ((200, 190), '北苑'),
}
edges = [('0', '1'), ('0', '3'), ('1', '2'), ('1', '3'), ('2', '3'), ('2', '4'), ('2', '5'), ('3', '4'),
('4', '5'), ('4', '7'), ('5', '6'), ('5', '7'), ('6', '7'), ('6', '9'), ('7', '8'), ('8', '9')]
screen = t.Screen()
screen.setup(500, 500)
pen = t.Turtle()
pen.hideturtle()
pen.penup()
edges_c = {'edge1': '300', 'edge2': '500', 'edge3': '300', 'edge4': '300',
'edge5': '100', 'edge6': '400', 'edge7': '200', 'edge8': '400',
'edge9': '600', 'edge10': '700', 'edge11': '500', 'edge12': '300',
'edge13': '500', 'edge14': '700', 'edge15': '100', 'edge16': '100', }
for node in nodes:
(x, y), name = node_positions[node]
pen.goto(x, y)
pen.dot(20, 'yellow')
pen.write(name, align='center')
for start, end in edges:
(x1, y1), _ = node_positions[start]
(x2, y2), _ = node_positions[end]
pen.goto(x1, y1)
pen.pendown()
pen.pensize(1)
pen.goto(x2, y2)
pen.penup()
pen.goto((x1 + x2) / 2, (y1 + y2) / 2)
pen.dot(1)
pen.write(edges_c.get('edge{}'.format(edges.index((start, end)) + 1)), align='center')
screen.mainloop()
def know(): # 地点介绍
print("请输入您想要了解的地点序号: ")
key = int(input())
if key == 0:
print("您的选择为:后勤服务楼\n您可以在这里得到一些后勤服务")
elif key == 1:
print("您的选择为:西苑\n西苑以物美价廉为特色,食堂里有兰州拉面、盖浇饭、水饺馄饨等美食,您可以在这里尽情品尝!")
elif key == 2:
print("您的选择为:操场\n这里包含有网球场、篮球场、足球场等,您可以在这里运动!")
elif key == 3:
print("您的选择为:文体中心\n这里包含有室内兵乓球馆、室内篮球馆、健美操馆等,您可以在这里运动!")
elif key == 4:
print("您的选择为:南门\n您可以在这里出校,看看校外,领略十里长山的美!")
elif key == 5:
print("您的选择为:文理大楼\n这里是决赛场地,您可以到这里看看,熟悉一下环境。")
elif key == 6:
print("您的选择为:计算机学院楼\n这里有很多计算机专业的老师,如果您有一些疑问,可以在这里得到解决!")
elif key == 7:
print("您的选择为:图书馆\n这里有许多书籍、自习室,您可以在这里看书学习。")
elif key == 8:
print("您的选择为:海韵湖\n海韵湖在校园北侧,倚靠着云书山,风景优美,四周有彩虹跑道,您可以在这里散散步放松心情!")
elif key == 9:
print("您的选择为:北苑\n北苑以种类丰富为特色,这里有特色小吃、风味料理等,您可以在这里尽情品尝!")
else:
print("很抱歉,系统暂时没有收录这个地点的信息。")
def dijkstra(graph, start, end): # 最短距离、路径
# 初始化距离字典和路径字典
distances = {node: float('inf') for node in graph}
distances[start] = 0
paths = {start: []}
visited = set()
queue = [(0, start)]
# 逐步扩展最短路径
while queue:
(current_distance, current_node) = heapq.heappop(queue)
if current_node == end:
return distances[end], paths[end]
if current_node in visited:
continue
visited.add(current_node)
for neighbor, weight in graph[current_node].items():
distance = current_distance + weight
if distance < distances[neighbor]:
distances[neighbor] = distance
paths[neighbor] = paths[current_node] + [(current_node, neighbor)]
heapq.heappush(queue, (distance, neighbor))
return float('inf'), []
def navigation_program(): # 用户输入的起点和终点,调用dijkstra(),得到最短距离、路径并输出
start = input("请输入起点:")
end = input("请输入终点:")
# 使用 Dijkstra 算法计算最短距离和路径
distance, path = dijkstra(graph, start, end)
# 输出结果
if distance == float('inf'):
print(f"没有从{start}到{end}的路径!")
else:
print(f"最短距离为:{distance * 100}m")
print(f"最短路径为:{' -> '.join([node for node, _ in path] + [end])}")
print()
def distance_menu(): # 校园导航菜单
print('=================校园导航=================')
print('1. 校园地图')
print('2. 校园地点简介')
print('3. 导航')
print('0. 退出程序')
print('=============================================')
def school_distance(): # 校园导航系统功能
while True:
distance_menu()
choice = input("请输入要执行的操作序号(0-2):")
if choice == '1': # 绘制校园地图
dt()
elif choice == '2': # 地点介绍
print("0: 后勤服务楼, 1: 西苑, 2: 操场, 3: 文体中心, 4: 南门, 5: 文理大楼,"
" 6: 计算机学院楼,7: 图书馆, 8: 海韵湖, 9: 北苑")
know()
elif choice == '3': # 导航
print("后勤服务楼, 西苑, 操场, 文体中心, 南门, 文理大楼, 计算机学院楼, 图书馆, 海韵湖, 北苑")
navigation_program()
elif choice == '0':
print("程序已退出。")
break
else:
print("输入错误,请重新输入!")
校园导航系统
最新推荐文章于 2024-09-29 23:16:27 发布
该代码示例展示了一个基于Python的校园导航系统,利用turtle库绘制校园地图,并实现了Dijkstra算法来计算两点间的最短路径。用户可以通过输入起点和终点获取导航信息,系统还提供了地点介绍功能。
摘要由CSDN通过智能技术生成