亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python游戲地圖最短路徑求解

發布時間:2020-08-26 01:49:16 來源:腳本之家 閱讀:221 作者:北落師門XY 欄目:開發技術

一.題目要求

參考下圖完成游戲地圖中從起點到目標點的最短路徑尋找問題。

 python游戲地圖最短路徑求解

二.設計思路

先對游戲地圖做了幾個設定,以矩陣來模擬游戲地圖。將可行的區域位置賦值0,障礙區賦值為inf。考慮到地圖大小,將起始點和終點區域賦值99。

從Start點A開始向外層擴展,每擴展一層pathlen加一。List Q存儲當前需要擴展的點,list P 存儲當前擴展層。當擴展到End點B時擴展結束,路徑可規劃。當Q為空時,本次層擴展結束,檢查P,若P非空,從P層向外擴展,若P為空,則End點B無法到達。

尋找最短路徑時,從End點B開始,尋找當前點附近8個點的標記中比當前點標記小的點,直到標記為1為止。

三.程序主體

# -*-coding:gbk -*-
from numpy import *
dirs = [(1,1),(1,0),(1,-1),(0,-1),(-1,-1),(-1,0),(-1,1),(0,1)] # 四鄰位置:從右下角開始順時針得到,是按坐標差得到的
def find_path(oldmap,A,B):
 oldmap[A[0], A[1]] = 99
 oldmap[B[0], B[1]] = 99
 [a,b]=oldmap.shape
 pathmap=oldmap.copy()
 Q=[]#存儲擴展節點
 P=[]#往外一層
 pathlen=1
 if A==B:
  print('start point is equal to end point')
  return True
 current=A
 while (True):
  for i in range(8):
   neighbor=[current[0]+dirs[i][0], current[1]+dirs[i][1]]
   if neighbor==B:
    print('the way is found')######################wrong
    print('中間過程')
    print(oldmap)
    find_way(oldmap,pathmap,A,B,a,b)#####調用路徑函數
    return True
   if (neighbor[0]>=0 and neighbor[1]>=0 and neighbor[0]<a and neighbor[1]<b and oldmap[neighbor[0],neighbor[1]]==0):
    P.append(neighbor)
    oldmap[neighbor[0],neighbor[1]]=pathlen

  if Q==[]:
   if P ==[]:
    print(oldmap) ##############
    print('No path')
    return False
   else:
    Q.extend(P)
    P=[]
    pathlen += 1

  else:
   current=Q.pop()

###################尋找最短路徑
def find_way(oldmap,pathmap,A,B,a,b):
 currentpos=B
 while (oldmap[currentpos[0],currentpos[1]]!=1):
  for i in range(8):
   neighborpos=[currentpos[0]+dirs[i][0], currentpos[1]+dirs[i][1]]
   if (neighborpos[0] >= 0 and neighborpos[1] >= 0 and neighborpos[0] < a and neighborpos[1] < b and oldmap[neighborpos[0],neighborpos[1]]!=0):
    if oldmap[neighborpos[0],neighborpos[1]]<oldmap[currentpos[0],currentpos[1]]:
     pathmap[neighborpos[0],neighborpos[1]]=oldmap[neighborpos[0],neighborpos[1]]
     currentpos=neighborpos
     break
 print('the way:')
 print(pathmap)

 四.主函數

def main():
 map =mat([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, inf,inf, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0,inf, 0, 0, 0, 0, 0, 0, 0],
    [inf,inf,inf, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0,inf, 0, 0, 0, 0, 0, 0, 0, 0, 0, inf],
    [0, 0,inf, 0, 0, 0, 0, 0, 0, 0, 0, 0, inf],
    [0, 0,inf, 0, 0, 0, 0, 0, 0, 0, 0, 0,inf],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, inf],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],])
 print('最初地圖')
 print(map)
 print('**********************************')
 A = [5, 0]
 # B=[5,0]
 B = [3, 12]
 find_path(map,A, B)


if __name__=='__main__':
 main()

五.運行結果

 python游戲地圖最短路徑求解

python游戲地圖最短路徑求解

六.結果分析

由中間過程對應的矩陣可知,共經歷了12次向外層擴展,第12次擴展即可將目標點包含進去。最短路徑如the way對應的矩陣所示,是通過一種類似梯度下降的方法得到的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正镶白旗| 蒲江县| 大城县| 宝兴县| 临泉县| 凤凰县| 靖安县| 密山市| 吴忠市| 车险| 延庆县| 乃东县| 全椒县| 墨脱县| 临西县| 犍为县| 翁牛特旗| 满城县| 五大连池市| 安龙县| 称多县| 井陉县| 肥东县| 新邵县| 垦利县| 沙洋县| 临武县| 灵山县| 襄樊市| 东阿县| 宿松县| 安国市| 高清| 特克斯县| 阆中市| 内乡县| 贺兰县| 烟台市| 普定县| 阿坝县| 辽源市|