动态规划_可视化校园导航Floyd算法应用

news2024/11/25 6:36:30

目录

        引言

        图片展示

        视频展示

        针对校园导航问题的分析

        关键技术和算法介绍

        详细介绍:算法的实现

        总结

        代码

        附件:Map.png


引言

        本文主要通过详细的程序打印和作者的推理过程,描述作者对Floyd算法的理解,阐述其中的动态规划思想是如何进行和应用。作者使用Python简单、方便移动的可视化,与Floyd算法相结合,让用户对最短路径一目了然,阅读完本文作者的推理过程后,读者更能对Floyd其中的原理以及对动态规划思想更能深刻体会。

图片展示

 

视频展示

最短路径展示

针对校园导航问题的分析

        本课题要解决的问题是如何在平面图上找出任意场所到达另一场所的最佳路径,要求是最短的路径、而且至少包括10个以上的场所、每个场所间有不同的路、以及界面需可视化。本课题也有一定的限制条件,即每两个场所的路长不能相同。进行本设计要达到的具体的目标为能够成功实现便捷地操作校园导航地图,通过点击就能直观地展现任意两个场所之间的最短路径。

关键技术和算法介绍

        本文用到的关键技术是动态规划,动态规划就是可以将问题拆分成若干子问题并实时保存子问题已解决的答案的一种算法,这是它比分治法更优的地方,不用去重复从头开始计算。本课题所用程序的设计思想是使用Python语言,以Floyd算法的二维数组邻接矩阵为基础,通过不断刷新数组来记录各点到各点的中间点,最后通过反推获取最终最短的路径。

核心代码

#==========================================================================================
for k in range(10):
    for i in range(10):
        for j in range(10):
                if AllZeroList[i][j]> AllZeroList[i][k] + AllZeroList[k][j]:
                        AllZeroList[i][j] = AllZeroList[i][k] + AllZeroList[k][j]    
                        path[i][j] = path[k][j]
#==========================================================================================                  

网上有其他版本,如最后path[i][j] = path[k],这个可能会在一些小地方会出错,这种属于中间点实时更新的策略错误。

AllZeroList是表示路径长度二维数组,

Path是表示动态规划记录中间点的二维数组

i是行

j是列

k在我的理解看来,是用来帮助i和j的辅助参数,时而变成i即行,时而变成j即列,确保路径长度二维数组里的每个元素都可以全部遍历和判断。哈哈哈我就把k称为动态规划参数吧。

这个是详细打印观看版,你可以详细地观看里面变化,从而得出自己的规律

#====================================详细打印观看变化版====================================
for k in range(10):
    for i in range(10):
        for j in range(10):
                if i>=7:
                        print("*************************************")
                        print("【测试】AllZeroList[i][j]:",AllZeroList[i][j])
                        print("【测试】AllZeroList[i][k]:",AllZeroList[i][k])
                        print("【测试】AllZeroList[k][j]:",AllZeroList[k][j])
                        
                        print("k,i,j:",k,i,j)
                        
                        
                if AllZeroList[i][j]> AllZeroList[i][k] + AllZeroList[k][j]:
                        print("\n\n------------------进入判断------------------")
                        AllZeroList[i][j] = AllZeroList[i][k] + AllZeroList[k][j]
                        for c in range(10):
                                   print("path3:",path[c],end="\n")
                        print("【测试】k:",k)
                        print("【测试】i:",i)
                        print("【测试】j:",j)
                                
                        print("【测试】path[k][j]:",path[k][j])
                        print("【测试】path[i][j]:",path[i][j])
                                    
                        path[i][j] = path[k][j]
                        print("-----------------------------------【测试】path[i][j]:",path[i][j])
                        for d in range(10):
                                print("path4:",path[d],end="\n")
#========================================================================================                

详细介绍:算法的实现

  • 绘制地图。

                海龟turtle绘制地图路线。

                根据地图路径创建二维数组邻接矩阵。

                                从自己到本身为0

                                两个点没有直接相连就设为无穷大inf

                                将地图各个路径长度导入

  • 创建二维数组Path记录中心点

                用i、j、k配合三个for循环比较地图已计算出来的各自距离的值,将AllZeroList[i][j]与AllZeroList[i][k]和AllZeroList[k][j]之和相比较,一旦大于这个和就将AllZeroList[i][k]和AllZeroList[k][j]之和赋给AllZeroList[i][j],并且需要同时更新中间点,将path[k][j]赋给path[i][j],让最短路径里的每个节点都不会出错。

  • 创建存入两个点的方法,比较两个数,如果不相等就去找两点的中间点,然后将中间点作为新的y又开始新一轮的比较,其中每找一次中间点就记一次中间点的数是多少,直到x和y相等就停止,最后将记的中间点从后往前推,也就是我们要的最短路径。
  • 海龟turtle重置,根据上面二维数组获取的最短路径对地图进行绘制,用蓝色线条显现出最短路径,从而完成实现可视化。

总结

Floyd算法就是使用动态规划的思想,利用3个for循环将AllZeroList[i][j]与AllZeroList[i][k]和AllZeroList[k][j]之和相比较,一旦大于这个和就将AllZeroList[i][k]和AllZeroList[k][j]之和赋给AllZeroList[i][j],并且需要同时更新中间点,将path[k][j]赋给path[i][j],让最短路径里的每个节点都不会出错。并创建存入任意两个点的方法,比较两个数,如果不相等就去找两点的中间点,然后将中间点作为新的y又开始新一轮的比较,其中每找一次中间点就记一次中间点的数是多少,直到x和y相等就停止,最后将记的中间点从后往前推,也就是我们要的最短路径。这就是Floyd弗洛伊德算法。

代码

import turtle
import time
from turtle import Turtle, mainloop
import numpy
import numpy as np
import sys
sys.setrecursionlimit(100000) #设置为十万,突破局限 

import threading


flag=1
control=0

def BreakThroughTheLimitation():
	print("1")

if __name__ == '__main__':
    threading.stack_size(200000000)
    thread = threading.Thread(target=BreakThroughTheLimitation) 
    thread.start()



##time.sleep(5)
turtle.hideturtle()
turtle.bgpic("Map.png")

turtle.setup(1800,920,0,0)
turtle.pensize(10)


turtle.speed(0)
turtle.delay(0)  #调速


turtle.title("庄彦涛_校园导航Floyd算法")


#===============================================
def ChuFa(control):        #1至2
    turtle.up()
    #提笔隐藏

    turtle.goto(-500,-395)
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('1',font=("隶书",20,"bold"))
    turtle.down()
##    time.sleep(5)

    turtle.up()
    turtle.left(135)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(160):
        turtle.fd(2)

        
    turtle.hideturtle()
#===============================================    


#===============================================
def Place1(control):       #2至4
    #提笔隐藏
    turtle.up()
    turtle.goto(-740,-145)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('2',font=("隶书",20,"bold"))
    


    turtle.up()
    turtle.right(120)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(170):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================


#===============================================
def Place2(control):    #4至1
    #提笔隐藏
    turtle.up()
    turtle.goto(-395,-55)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('4',font=("隶书",20,"bold"))


    turtle.up()
    turtle.right(123)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(162):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================
    

#===============================================
def Place3(control):     #2至3
    #提笔隐藏
    turtle.up()
    turtle.goto(-740,-145)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('2',font=("隶书",20,"bold"))


    turtle.up()
    turtle.left(175)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(180):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================


#===============================================
def Place4(control):     #3至5
    #提笔隐藏
    turtle.up()
    turtle.goto(-590,215)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('3',font=("隶书",20,"bold"))


    turtle.up()
    turtle.right(80)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(180):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================


#===============================================
def Place5(control):    #5至4
    #提笔隐藏
    turtle.up()
    turtle.goto(-225,135)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('5',font=("隶书",20,"bold"))
    


    turtle.up()
    turtle.right(120)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(110):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================



#===============================================
def Place6(control):     #4至6
    #提笔隐藏
    turtle.up()
    turtle.goto(-395,-55)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('4',font=("隶书",20,"bold"))


    turtle.up()
    turtle.left(133)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(172):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================


#===============================================
def ChuFa_1(control):      #1至6
    turtle.up()
    #提笔隐藏

    turtle.goto(-500,-395)
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('1',font=("隶书",20,"bold"))
    turtle.down()


    turtle.up()
    turtle.left(35)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(280):
        turtle.fd(2)

        
    turtle.hideturtle()
#===============================================



#===============================================
def Place7(control):    #5至6
    #提笔隐藏
    turtle.up()
    turtle.goto(-225,135)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('5',font=("隶书",20,"bold"))
    


    turtle.up()
    turtle.right(80)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(130):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================


#===============================================
def Place8(control):     #5至9
    #提笔隐藏
    turtle.up()
    turtle.goto(-225,135)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('5',font=("隶书",20,"bold"))
    


    turtle.up()
    turtle.left(60)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(200):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================



#===============================================
def Place9(control):    #6至7
    #提笔隐藏
    turtle.up()
    turtle.goto(-20,-65)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('6',font=("隶书",20,"bold"))


    turtle.up()
    turtle.right(15)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(110):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================


#===============================================
def Place10(control):   #7至8
    #提笔隐藏
    turtle.up()
    turtle.goto(230,-65)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('7',font=("隶书",20,"bold"))
    


    turtle.up()
    turtle.left(40)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(90):
        turtle.fd(2)

        
    turtle.hideturtle()  
#===============================================


#===============================================
def Place11(control):    #9至10
    #提笔隐藏
    turtle.up()
    turtle.goto(190,250)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('9',font=("隶书",20,"bold"))


    turtle.up()
    turtle.right(35)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(220):
        turtle.fd(2)

    turtle.dot(60,"#ffdd20")    
    turtle.hideturtle()  
#===============================================


#===============================================
def Place12(control):   #8至10
    #提笔隐藏
    turtle.up()
    turtle.goto(390,70)
    turtle.down()
    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('8',font=("隶书",20,"bold"))


    turtle.up()
    turtle.left(34)
    if control == 0:
        turtle.pencolor("#665f35")
    else:
        turtle.pencolor("#0000FF")
    for i in range(16):
        turtle.fd(2)
    turtle.down()
    for i in range(158):
        turtle.fd(2)

    turtle.dot(60,"#ffdd20")
    turtle.pencolor("#665f35")
    turtle.write('10',font=("隶书",20,"bold"))

        
    turtle.hideturtle()  
##===============================================

    
ChuFa(control)
Place1(control)
Place2(control)
Place3(control)
Place4(control)
Place5(control)
Place6(control)
ChuFa_1(control)
Place7(control)
Place8(control)
Place9(control)
Place10(control)
Place11(control)
Place12(control)


def distance():
    turtle.up()
    turtle.pencolor("#665f35")

    #=================================================
    turtle.goto(-650,-345)
    turtle.write('40米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(-650,-155)
    turtle.write('50米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(-520,-245)
    turtle.write('50米',font=("simkai",20,"normal"))
    #=================================================

    #------------------------------------------------------------------------

    #=================================================
    turtle.goto(-380,80)
    turtle.write('30米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(-150,70)
    turtle.write('30米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(-280,-100)
    turtle.write('50米',font=("simkai",20,"normal"))
    #=================================================

    #------------------------------------------------------------------------

    #=================================================
    turtle.goto(-480,200)
    turtle.write('50米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(-600,100)
    turtle.write('70米',font=("simkai",20,"normal"))
    #=================================================


    #------------------------------------------------------------------------


    #=================================================
    turtle.goto(-200,-230)
    turtle.write('100米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(80,-120)
    turtle.write('30米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(330,-20)
    turtle.write('20米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(400,150)
    turtle.write('40米',font=("simkai",20,"normal"))
    #=================================================


    #------------------------------------------------------------------------


    #=================================================
    turtle.goto(10,220)
    turtle.write('80米',font=("simkai",20,"normal"))
    #=================================================


    #=================================================
    turtle.goto(390,300)
    turtle.write('90米',font=("simkai",20,"normal"))
    #=================================================


distance()
x=0
y=0

def submit1():
    global x
    screen1 = turtle.Screen()
    answer1 = screen1.textinput("庄彦涛_校园导航Floyd算法",\
        "----------------------请输入出发地的编号----------------------")


    if answer1 is None:
        print("未输入编号!")
##        screen1.clear()
##        screen1.bye()
    else:
        print("好的!")
        x=int(answer1)-1



def submit2():
    global y
    screen2 = turtle.Screen()
    answer2 = screen2.textinput("庄彦涛_校园导航Floyd算法", \
        "----------------------请输入目的地的编号----------------------")


    if answer2 is None:
        print("未输入编号!")
        screen2.clear()
        screen2.bye()
    else:
        print("好的!")
        y=int(answer2)-1




f = float('inf')  # float('inf')表示无穷大

print(f)



#因为整个地图有10个地点
AllZeroList=[[0] * 10 for i in range(10)]  #全零二维数组  (n行,n列 ,填充数)
for d in range(10):
    print("AllZeroList:",AllZeroList[d],end="\n")  




B=[40,50,100,40,70,50,70,50,50,50,30,50,50,30,30,80,100,50\
   ,30,30,30,20,20,40,80,90,40,90]


Name="Judge"

for p in range(1,10+1):
    Choose=Name+str(p)
    if p==1:
        Choose=[1,2,4,6]    #是否相邻判断列表1
    if p==2:
        Choose=[2,3,4,1]    #是否相邻判断列表2
    if p==3:
        Choose=[3,2,5]      #是否相邻判断列表3
    if p==4:
        Choose=[4,1,2,5,6]  #是否相邻判断列表4
    if p==5:
        Choose=[5,3,4,6,9]  #是否相邻判断列表5
    if p==6:
        Choose=[6,1,4,5,7]  #是否相邻判断列表6
    if p==7:
        Choose=[7,6,8]      #是否相邻判断列表7
    if p==8:
        Choose=[8,7,10]     #是否相邻判断列表8
    if p==9:
        Choose=[9,5,10]     #是否相邻判断列表9
    if p==10:
        Choose=[10,9,8]    #是否相邻判断列表10


    
    print(Choose)
    
    for q in range(1,10+1):
        print("q:",q)
        print("Choose[0]:",Choose[0])
        if q==Choose[0]:
            AllZeroList[p-1][q-1]=0
        else:
            if q in Choose:
                AllZeroList[p-1][q-1]=1
            else:
                AllZeroList[p-1][q-1]=f
                #用f来表示无穷大,即两个地点没有直接连在一起
                
print("  1 2 3 4 5 6 7 8 9 10")
for e in range(10):
    print("AllZeroList:",AllZeroList[e],end="\n")
    
print(B)
for p in range(1,10+1):
    for q in range(1,10+1):
        if AllZeroList[p-1][q-1]==1:
            AllZeroList[p-1][q-1]=B.pop(0)
        
print("\n    1   2   3   4   5   6   7   8   9   10")
for f in range(10):
    print("AllZeroList:",AllZeroList[f],end="\n")  

path=[[i] * 10 for i in range(10)]
for b in range(10):
    print("path1:",path[b],end="\n")


#=================================简化版===================================================================
##for k in range(10):
##    for i in range(10):
##        for j in range(10):
##                if AllZeroList[i][j]> AllZeroList[i][k] + AllZeroList[k][j]:
##                        AllZeroList[i][j] = AllZeroList[i][k] + AllZeroList[k][j]    
##                        path[i][j] = path[k][j]
#====================================================================================================                       


#详细打印观看变化版
for k in range(10):
    for i in range(10):
        for j in range(10):
                if i>=7:
                        print("*************************************")
                        print("【测试】AllZeroList[i][j]:",AllZeroList[i][j])
                        print("【测试】AllZeroList[i][k]:",AllZeroList[i][k])
                        print("【测试】AllZeroList[k][j]:",AllZeroList[k][j])
                        
                        print("k,i,j:",k,i,j)
                        
                        
                if AllZeroList[i][j]> AllZeroList[i][k] + AllZeroList[k][j]:
                        print("\n\n------------------进入判断------------------")
                        AllZeroList[i][j] = AllZeroList[i][k] + AllZeroList[k][j]
                        for c in range(10):
                                   print("path3:",path[c],end="\n")
                        print("【测试】k:",k)
                        print("【测试】i:",i)
                        print("【测试】j:",j)
                                
                        print("【测试】path[k][j]:",path[k][j])
                        print("【测试】path[i][j]:",path[i][j])
                                    
                        path[i][j] = path[k][j]
                        print("-----------------------------------【测试】path[i][j]:",path[i][j])
                        for d in range(10):
                                print("path4:",path[d],end="\n")

print("\n")
for c in range(10):
    print("path2:",path[c],end="\n")
    
route = []
change=0

def RouteOfTwoPlace(x,y):
    print("==========新的一轮计算==========")
    print(x)
    print(y)
    global route
    global change
    if x>y:
        change=x
        x=y
        y=change
    def AddRoute(x,y):
        print("----------------")
        print(route)
        print("1x:",x)
        print("-------------------------------------1y:",y)
        if x!=y:
            print("1path[x][y]:",path[x][y])
            AddRoute(x,path[x][y])
        print("*****\/*****")
        print("2x:",x)
        print("2y:",y)
        print("*****/\*****")
        print("最小的值从后往前反推,就像栈一样,羽毛球筒正着放进去,反着把羽毛球y拿出来,y加进route里:",y)
        
##        return route.append(y+1)
        return route.append(y)
        #如果x和y相等那么此时的y就是最短路径上的其中一个路线点,加进route里


    AddRoute(x,y)
    route2=route
    RouteStr=str(route)
    RouteStr=RouteStr.replace(',','-->')
    print(f"测试:从{x+1}到{y+1}的最短路径为:{RouteStr}")

    print("\n\n++++++++++++++++++++++++++++++++++++++\n\n")
    for t in range(len(route)):
        route[t]+=1
    RouteStr=str(route)
    RouteStr=RouteStr.replace(',','-->')
    print(f"展示给客户:从{x+1}到{y+1}的最短路径为:{RouteStr}")
    
for g in range(10):
    print("AllZeroList:",AllZeroList[g],end="\n")  

def submit3():
    global y
    global flag
    screen3 = turtle.Screen()
    answer3 = screen3.textinput("庄彦涛_校园导航Floyd算法", \
        "------------是否继续测算?    是【除0外任意键】   否【0】----------------------")

    print(type(answer3))
    if answer3=='0':
        print("已退出!")
        flag=0
##        screen2.clear()
##        screen2.bye()
    else:
        print("继续测算中!")
        


while flag==1:
    submit1()
    submit2()
    RouteOfTwoPlace(x,y)
    


    print(route)
    cat=[]
    a=b=c=d=e=f=g=h=i=j=k=l=m=n=0
    change2=""
    unfold=0
    while len(route):
        cat.append(route.pop(0))
        print(cat)
        control=1
        
        turtle.right(86)
        if len(cat)==2:
            if cat[0]>cat[1]:
                change2=cat[1]
                cat[1]=cat[0]
                cat[0]=change2
                unfold=1
            if cat[0]==1 and cat[1]==2:
                a=1
            if cat[0]==2 and cat[1]==4:
                b=1
            if cat[0]==1 and cat[1]==4:
                c=1
            if cat[0]==2  and cat[1]==3:
                d=1
            if cat[0]==3 and cat[1]==5:
                e=1
            if cat[0]==4 and cat[1]==5:
                f=1
            if cat[0]==4 and cat[1]==6:
                print("==========")
                g=1
            if cat[0]==1 and cat[1]==6:
                h=1
            if cat[0]==5 and cat[1]==6:
                i=1
            if cat[0]==5 and cat[1]==9:
                j=1
            if cat[0]==6 and cat[1]==7:
                k=1
            if cat[0]==7 and cat[1]==8:
                l=1
            if cat[0]==9 and cat[1]==10:
                m=1
            if cat[0]==8 and cat[1]==10:
                n=1
            cat.pop(0)
            if unfold==1:
                cat[0]=change2
            print(cat)
    print(a,b,c,d,e,f,g,h,i,j,k,l,m,n)

    ##turtle.left(31)
    turtle.reset()
    turtle.pensize(10)
    ChuFa(a)
    Place1(b)
    Place2(c)
    Place3(d)
    Place4(e)
    Place5(f)
    Place6(g)
    ChuFa_1(h)
    Place7(i)
    Place8(j)
    Place9(k)
    Place10(l)
    Place11(m)
    Place12(n)

    distance()
    

    submit3()

                

附件:Map.png

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

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

相关文章

突然发现CSDN变得不一样了【建议】【活动】

突然发现CSDN变得不一样了【活动】 前言推荐突然发现CSDN变得不一样了关于上传代码包关于上传视频关于运行代码关于插入代码1关于插入代码2关于社区的建立关于社区的管理关于此次活动的评选关于排行突然发现说明一下关于我 最后 前言 2023-6-19 23:34:04 本文章仅用于参加 20…

【Python 随练】年龄计算问题

题目: 有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人&#x…

C++基础(8)——类和对象(6)

前言 本文主要介绍了C中多态的基本知识 4.7.1:多态的基本概念和原理剖析 1:基本概念 静态多态:函数重载、运算符重载 动态多态:派生类和虚函数实现运行时多态 静态多态在编译阶段确定函数地址;动态多态在运行阶段…

微信小程序uniapp+springboot实现小程序服务通知

微信小程序uniappspringboot实现小程序服务通知 1. 实现效果 2. 模板选用及字段类型判断 2.1 开通订阅消息,并选用模板 如果点击订阅消息让开启消息订阅开启后就可以出现以下页面,我本次使用的模板是月卡到期提醒模板,点击选用即可 2.2 查看模板字段类型 TemplateId后续会使用…

面试官问:Redis 分布式锁如何自动续期?

资深面试官:你们项目中的分布式锁是怎么实现的? 老任:基于redis的set命令,该命令有nx和ex选项。 资深面试官:那如果锁到期了,业务还没结束,如何进行自动续期呢? 老任:…

第九章 番外篇:TORCHSCRIPT

下文中的代码都使用参考教程中的例子。 会给出一点自己的解释。 参考教程: 文章目录 Introduction复习一下nn.Module()Torchscripttorch.jit.ScriptModule()torch.jit.script()torch.jit.trace()一个小区别 使用示例tracing Modulesscripting ModuleMixing scripti…

乐鑫线上研讨会|探索 LCD 屏在物联网中的发展趋势

LCD 屏通过显示实时信息并提供交互式体验,现已成为各类设备的重要组成部分。在当下的 AIoT 时代,随着物联网技术的快速发展和应用场景的不断拓展,LCD 作为人机交互的主要输入输出设备,在智能家居、智能安防、工业控制、智慧城市等…

C#开发的OpenRA游戏之建造物品的窗口5

C#开发的OpenRA游戏之建造物品的窗口5 前面分析了TAB窗口的建立和运行,现在关注它的子窗口,也就是ProductionPaletteWidget类实现的窗口,这个窗口主要用来显示所有可以创建物品的ICON图标。用户可以通过这个窗口实现物品创建,如下图所示: 比如要创建电厂,就是点击上面…

【好书精读】网络是怎样连接的 之 创建套接字

(该图由AI制作 学习AI绘图 联系我) 目录 协议栈的内部结构 套接字的实体就是通信控制信息 真正的套接字 调用 socket 时的操作 从应用程序收到委托后 , 协议栈通过 TCP 协议收发数据的操作可以分为 4 个阶段 。 首先是创 建套接字 &…

SothisAI创建容器和conda环境

1.创建容器(设置torch版本,cuda,python版本等等)后进入web shell 2.shell里输入ssh username(你自己的用户名) IP(你创建的实例的ip地址) 3.在web平台创建你自己的文件夹 4.shel…

小程序请求封装、使用

小程序请求封装 1、要了解方法 1.1、wx.request() wx.request 发起 HTTPS 网络请求。(详情点击wx.request查看官方文档) 1.2、wx.showModal() wx.showModal 显示模态对话框。(详情点击wx.showModal查看官方文档) 1.3、wx.sho…

Swift 周报 第三十一期

文章目录 前言新闻和社区注册 WWDC23 实验室和活动Apple Vision Pro 和 visionOS 撼世登场App Store 中新增的隐私功能 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第二十二期,每个模块已初步成型。各位读者如果…

奇数分频器电路设计

目录 奇数分频器电路设计 1、奇数分频器电路简介 2、实验任务 3、程序设计 3.1、7分频电路代码 3.2、仿真验证 3.2.1、编写 TB 文件 3.2.2、仿真验证 4、用状态机实现7分频电路设计 4.1、代码如下: 4.2、使用状态机的好处 奇数分频器电路设计 前面一节我…

前端JS限制绕过测试-业务安全测试实操(17)

前端JS限制绕过测试,请求重放测试 前端JS限制绕过测试 测试原理和方法 很多商品在限制用户购买数量时,服务器仅在页面通过JS脚本限制,未在服务器端校验用户提交的数量,通过抓取客户端发送的请求包修改JS端生成处理的交易数据,如将请求中的商品数量改为大于最大数限制的值…

Vue中使用分布式事务管理解决方案

文章目录 分布式事务管理是什么优点:缺点:弥补缺点的方法有: 解决方案 分布式事务管理是什么 分布式事务管理是指在分布式系统中对跨多个数据库或服务的操作进行协调和保证一致性的机制。在分布式环境下,由于涉及到多个独立的资源…

半年面试12家大厂,我总结出了这份2023版互联网大厂(Java岗)面试真题汇总

Java面试 现在互联网大环境不好,互联网公司纷纷裁员并缩减HC,更多程序员去竞争更少的就业岗位,整的IT行业越来越卷。身为Java程序员的我们就更不用说了,上班8小时需要做好本职工作,下班后还要不断提升技能、技术栈&am…

docker 命令解释 - nginx镜像制作

目录 Dockerfile 部分命令解释 1、ENTRYPOINT 而ENTRYPOINT 语言 CMD的区别 1、docker run 启动容器的时候,可以传递参数进入给ENTRYPOINT里面的命令(-e) 2、当2者都存在的时候,CMD里的内容会成为 ENTRYPOINT 里的参数&#x…

Pytest中断言的重要性

目录 前言 pytest断言 增加断言详细信息 异常断言 .type .value .traceback pytest常用断言 前言 在pytest中,断言是非常重要的一部分。断言可以帮助我们验证代码的正确性,检查函数返回的值是否符合要求,以及判断程序中预期行为是否发生。如…

MySQL数据库(二)

前言 本文是关于MySQL数据库的第二弹。 临时表不受原表数据类型的约束!! SQL语法不区分大小写。 一、列的使用 (一)列的增加 1、全列插入 insert into 表名 values (数据,数据); 也可以同时插入多条数据: insert into 表名 va…

小程序跳转多次返回首页

小程序跳转多次返回首页 小程序跳转多个页面后直接返回首页 问题 例&#xff1a; 跳转&#xff1a;A(首页) - > B -> C -> D 返回&#xff1a;D -> A(首页) 1、页面中按钮跳转 <!--D页面 WXML--> <view class"-btn"><button bindtap&q…