欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python游戲地圖最短路徑求解

 更新時(shí)間:2019年01月16日 17:03:47   作者:北落師門XY  
這篇文章主要為大家詳細(xì)介紹了python游戲地圖最短路徑的求解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一.題目要求

參考下圖完成游戲地圖中從起點(diǎn)到目標(biāo)點(diǎn)的最短路徑尋找問(wèn)題。

 

二.設(shè)計(jì)思路

先對(duì)游戲地圖做了幾個(gè)設(shè)定,以矩陣來(lái)模擬游戲地圖。將可行的區(qū)域位置賦值0,障礙區(qū)賦值為inf??紤]到地圖大小,將起始點(diǎn)和終點(diǎn)區(qū)域賦值99。

從Start點(diǎn)A開(kāi)始向外層擴(kuò)展,每擴(kuò)展一層pathlen加一。List Q存儲(chǔ)當(dāng)前需要擴(kuò)展的點(diǎn),list P 存儲(chǔ)當(dāng)前擴(kuò)展層。當(dāng)擴(kuò)展到End點(diǎn)B時(shí)擴(kuò)展結(jié)束,路徑可規(guī)劃。當(dāng)Q為空時(shí),本次層擴(kuò)展結(jié)束,檢查P,若P非空,從P層向外擴(kuò)展,若P為空,則End點(diǎn)B無(wú)法到達(dá)。

尋找最短路徑時(shí),從End點(diǎn)B開(kāi)始,尋找當(dāng)前點(diǎn)附近8個(gè)點(diǎn)的標(biāo)記中比當(dāng)前點(diǎn)標(biāo)記小的點(diǎn),直到標(biāo)記為1為止。

三.程序主體

# -*-coding:gbk -*-
from numpy import *
dirs = [(1,1),(1,0),(1,-1),(0,-1),(-1,-1),(-1,0),(-1,1),(0,1)] # 四鄰位置:從右下角開(kāi)始順時(shí)針得到,是按坐標(biāo)差得到的
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=[]#存儲(chǔ)擴(kuò)展節(jié)點(diǎn)
 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('中間過(guò)程')
    print(oldmap)
    find_way(oldmap,pathmap,A,B,a,b)#####調(diào)用路徑函數(shù)
    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)

 四.主函數(shù)

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()

五.運(yùn)行結(jié)果

 

六.結(jié)果分析

由中間過(guò)程對(duì)應(yīng)的矩陣可知,共經(jīng)歷了12次向外層擴(kuò)展,第12次擴(kuò)展即可將目標(biāo)點(diǎn)包含進(jìn)去。最短路徑如the way對(duì)應(yīng)的矩陣所示,是通過(guò)一種類似梯度下降的方法得到的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python多線程多進(jìn)程實(shí)例對(duì)比解析

    Python多線程多進(jìn)程實(shí)例對(duì)比解析

    這篇文章主要介紹了Python多線程多進(jìn)程實(shí)例對(duì)比解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python 迭代器與生成器實(shí)例詳解

    Python 迭代器與生成器實(shí)例詳解

    這篇文章主要介紹了Python 迭代器與生成器實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Pygame中Sprite的使用方法示例詳解

    Pygame中Sprite的使用方法示例詳解

    這篇文章主要介紹了Pygame中Sprite的使用方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • python中h5py開(kāi)源庫(kù)的使用樣例詳解

    python中h5py開(kāi)源庫(kù)的使用樣例詳解

    這篇文章主要介紹了python中的h5py開(kāi)源庫(kù)的使用,本文只是簡(jiǎn)單的對(duì)h5py庫(kù)的基本創(chuàng)建文件,數(shù)據(jù)集和讀取數(shù)據(jù)的方式進(jìn)行介紹,需要的朋友可以參考下
    2022-05-05
  • Python?SQLAlchemy庫(kù)的實(shí)現(xiàn)示例

    Python?SQLAlchemy庫(kù)的實(shí)現(xiàn)示例

    SQLAlchemy庫(kù)是一個(gè)強(qiáng)大的工具,為開(kāi)發(fā)人員提供了便捷的方式來(lái)處理與數(shù)據(jù)庫(kù)的交互,本文主要介紹了Python?SQLAlchemy庫(kù)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • Django超詳細(xì)講解圖書管理系統(tǒng)的實(shí)現(xiàn)

    Django超詳細(xì)講解圖書管理系統(tǒng)的實(shí)現(xiàn)

    前段時(shí)間翻文件發(fā)現(xiàn)了以前學(xué)習(xí)python和django時(shí)做的一個(gè)系統(tǒng),當(dāng)時(shí)的想法是將這玩意做出來(lái)應(yīng)付web開(kāi)發(fā)大作業(yè)、課程設(shè)計(jì)作業(yè)甚至是畢設(shè)用的,實(shí)際上也確實(shí)應(yīng)付了課程設(shè)計(jì),功能雖然不算多,但是應(yīng)付課程設(shè)計(jì)或者大作業(yè)綽綽有余了
    2022-07-07
  • 使用numba對(duì)Python運(yùn)算加速的方法

    使用numba對(duì)Python運(yùn)算加速的方法

    今天小編就為大家分享一篇使用numba對(duì)Python運(yùn)算加速的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • python將日志寫入文件超詳細(xì)步驟

    python將日志寫入文件超詳細(xì)步驟

    在Python中l(wèi)ogging模塊是一個(gè)強(qiáng)大的工具,用于記錄和輸出應(yīng)用程序的日志信息,這篇文章主要給大家介紹了關(guān)于python將日志寫入文件的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Django基礎(chǔ)知識(shí)與基本應(yīng)用入門教程

    Django基礎(chǔ)知識(shí)與基本應(yīng)用入門教程

    這篇文章主要介紹了Django基礎(chǔ)知識(shí)與基本應(yīng)用,結(jié)合實(shí)例形式分析了Django框架基本的項(xiàng)目創(chuàng)建、啟動(dòng)、查看版本等操作,并結(jié)合一個(gè)簡(jiǎn)單的blog應(yīng)用示例分析了Django的基本使用方法,需要的朋友可以參考下
    2018-07-07
  • Python按天實(shí)現(xiàn)生成時(shí)間范圍序列的方法詳解

    Python按天實(shí)現(xiàn)生成時(shí)間范圍序列的方法詳解

    有的時(shí)候我們希望生成一段時(shí)間返回,比如從?2022-01-01?00:00:00?后面的?10?天,這么?10?個(gè)?datetime?對(duì)象,但是我們又不想自己去計(jì)算哪些月有30天哪些月有31天。所以本文將用Python實(shí)現(xiàn)按天自動(dòng)生成時(shí)間范圍序列,需要的可以參考一下
    2022-11-11

最新評(píng)論