一種迷宮最短路徑的搜索方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)軟件領(lǐng)域,尤其涉及一種迷宮最短路徑的搜索方法及系統(tǒng)。
【背景技術(shù)】
[0002]目前關(guān)于迷宮的算法主要有兩種:寬度優(yōu)先搜索算法和深度優(yōu)先搜索算法。具體為:
[0003]寬度優(yōu)先搜索算法:從起點(diǎn)開始,尋找出所有走一步所能到達(dá)的位置,記錄這些位置,再?gòu)倪@些位置開始,尋找出所有再走一步(即從起點(diǎn)走2步)所能到達(dá)的位置,不斷繼續(xù),直到找到目標(biāo)點(diǎn)止,然后從記錄的這些位置(像一棵樹)中找出路徑;這種算法可找到一條或者所有最短路徑,但是需要記錄大量位置,使用大量?jī)?nèi)存。
[0004]深度優(yōu)先搜索算法:從入口出發(fā),順著某一方向向前探索,若能走通,則繼續(xù)往前走;否則沿原路退回(回溯),換一個(gè)方向再繼續(xù)探索.直至所有可能的通路都探索到為止。如果恰好某一步探索到出口,則就找到了從入口到出口的路徑。為了保證在任何位置上都能沿原路退回,防止死循環(huán),需要使用堆棧來保存大量記錄,而要求解最短路徑,則必須搜索出所有到達(dá)出口的路徑,通過比較得到最短距離的路徑,這樣也必然要求增加數(shù)據(jù)空間來保存搜索過程中的當(dāng)前最短路徑,增加了空間復(fù)雜度。
[0005]所以,目前已有算法對(duì)于解決大規(guī)模迷宮問題還存在不足,主要問題在于搜索空間大、求解速度慢、無法得到最優(yōu)路徑等。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題在于提供一種迷宮最短路徑的搜索方法及系統(tǒng),旨在能快速在迷宮中找到一條最短行徑路線。
[0007]本發(fā)明是這樣實(shí)現(xiàn)的,一種迷宮最短路徑的搜索方法,所述迷宮包括起點(diǎn)、終點(diǎn)、障礙物迷宮格、無障礙迷宮格;所述方法包括下述步驟:
[0008]步驟A,設(shè)置二維數(shù)組;所述二維數(shù)組的整體元素布局與迷宮的整體迷宮格布局相同;
[0009]步驟B,在終點(diǎn)處進(jìn)行第I次查找,以查找出與終點(diǎn)相鄰的無障礙迷宮格,并將二維數(shù)組中與本次查找出的迷宮格對(duì)應(yīng)位置的元素值設(shè)置為I ;
[0010]步驟C,在當(dāng)前已設(shè)置的迷宮格處進(jìn)行第i次查找,以找出當(dāng)前迷宮格,并將二維數(shù)組中與本次查找出的迷宮格對(duì)應(yīng)位置的元素設(shè)置為i,其中,i為大于I的自然數(shù);i以I為增加步長(zhǎng)的遞增方式重復(fù)執(zhí)行此步驟,直至到達(dá)起點(diǎn);
[0011]步驟D,在二維數(shù)組中選擇元素值最大的一個(gè)元素,然后按照元素值遞減的方式依次選擇,直至選擇到元素值為I的元素,將被選擇的元素所形成的路徑作為迷宮起點(diǎn)到終點(diǎn)的最短路徑。
[0012]進(jìn)一步地,步驟B和步驟C中,查找無障礙迷宮格的具體順序?yàn)閺漠?dāng)前所處迷宮格開始按照上-下-左-右的順序查找;并且在二維數(shù)組中已經(jīng)設(shè)置過元素值的元素,不重復(fù)設(shè)置元素值。
[0013]進(jìn)一步地,在步驟D中,在選擇過程中,若存在多個(gè)元素具有需被選擇的元素值,則從該多個(gè)元素中隨機(jī)選擇一個(gè)。
[0014]進(jìn)一步地,步驟D在進(jìn)行選擇過程中,將被選擇的元素記錄至自定義的一維數(shù)組中。
[0015]本發(fā)明還提供了一種迷宮最短路徑的搜索系統(tǒng),所述迷宮包括起點(diǎn)、終點(diǎn)、障礙物迷宮格、無障礙迷宮格;所述系統(tǒng)包括:
[0016]二維數(shù)組設(shè)置模塊,用于設(shè)置二維數(shù)組;所述二維數(shù)組的整體元素布局與迷宮的整體迷宮格布局相同;
[0017]第I次查找模塊,用于在終點(diǎn)處進(jìn)行第I次查找,以查找出與終點(diǎn)相鄰的無障礙迷宮格,并將二維數(shù)組中與本次查找出的迷宮格對(duì)應(yīng)位置的元素值設(shè)置為I;
[0018]第i次查找模塊,用于在當(dāng)前已設(shè)置的迷宮格處進(jìn)行第i次查找,以找出當(dāng)前迷宮格,并將二維數(shù)組中與本次查找出的迷宮格對(duì)應(yīng)位置的元素設(shè)置為i,其中,i為大于I的自然數(shù);i以I為增加步長(zhǎng)的遞增方式重復(fù)執(zhí)行此過程,直至到達(dá)起點(diǎn);
[0019]最短路徑選擇模塊,用于在二維數(shù)組中選擇元素值最大的一個(gè)元素,然后按照元素值遞減的方式依次選擇,直至選擇到元素值為I的元素,將被選擇的元素所形成的路徑作為迷宮起點(diǎn)到終點(diǎn)的最短路徑。
[0020]進(jìn)一步地,所述第I次查找模塊和所述第i次查找模塊中,查找無障礙迷宮格的具體順序?yàn)閺漠?dāng)前所處迷宮格開始按照上-下-左-右的順序查找;并且在二維數(shù)組中已經(jīng)設(shè)置過元素值的元素,不重復(fù)設(shè)置元素值。
[0021]進(jìn)一步地,所述最短路徑選擇模塊在選擇過程中,若存在多個(gè)元素具有需被選擇的元素值,則從該多個(gè)元素中隨機(jī)選擇一個(gè)。
[0022]進(jìn)一步地,所述最短路徑選擇模塊在進(jìn)行選擇過程中,將被選擇的元素記錄至自定義的一維數(shù)組中。
[0023]本發(fā)明與現(xiàn)有技術(shù)相比,有益效果在于:本發(fā)明提供的一種迷宮最短路徑的搜索方法及系統(tǒng)基于潑水法,即水從目的地開始擴(kuò)散,每次擴(kuò)散一格,直到擴(kuò)散到出發(fā)點(diǎn),記住水到達(dá)各個(gè)點(diǎn)所經(jīng)過的步數(shù),從中找出一條最短路徑;本發(fā)明彌補(bǔ)了現(xiàn)有技術(shù)的不足,能快速在迷宮中找到一條最短的路線。
【附圖說明】
[0024]圖1是本發(fā)明實(shí)施例提供的迷宮最短路徑的搜索方法示意圖;
[0025]圖2-6是本發(fā)明實(shí)施例提供的迷宮最短路徑的搜索過程示意圖;
[0026]圖7是本發(fā)明實(shí)施例提供的迷宮最短路徑的搜索系統(tǒng)示意圖。
【具體實(shí)施方式】
[0027]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0028]本發(fā)明的技術(shù)原理基于潑水法,水從目的地開始擴(kuò)散,每次擴(kuò)散一格,直到擴(kuò)散到出發(fā)點(diǎn),記住水到達(dá)各個(gè)點(diǎn)所經(jīng)過的步數(shù),從中找出一條最短路徑。
[0029]本發(fā)明所適用的迷宮包括起點(diǎn)、終點(diǎn)、障礙物迷宮格、無障礙迷宮格;如圖1所示,所提供的搜索方法包括下述步驟:
[0030]步驟A,設(shè)置二維數(shù)組;所述二維數(shù)組的整體元素布局與迷宮的整體迷宮格布局相同;
[0031]步驟B,在終點(diǎn)處進(jìn)行第I次查找,以查找出與終點(diǎn)相鄰的無障礙迷宮格,并將二維數(shù)組中與本次查找出的迷宮格對(duì)應(yīng)位置的元素值設(shè)置為I ;
[0032]步驟C,在當(dāng)前已設(shè)置的迷宮格處進(jìn)行第i次查找,以找出當(dāng)前迷宮格,并將二維數(shù)組中與本次查找出的迷宮格對(duì)應(yīng)位置的元素設(shè)置為i,其中,i為大于I的自然數(shù);i以I為增加步長(zhǎng)的遞增方式重復(fù)執(zhí)行此步驟,直至到達(dá)起點(diǎn);
[0033]在步驟B和步驟C中,查找無障礙迷宮格的具體順序?yàn)閺漠?dāng)前所處迷宮格開始按照上-下-左-右的順序查找;并且在二維數(shù)組中已經(jīng)設(shè)置過元素值的元素,不重復(fù)設(shè)置元素值。
[0034]步驟D,在二維數(shù)組中選擇元素值最大的一個(gè)元素,然后按照元素值遞減的方式依次選擇,直至選擇到元素值為I的元素,將被選擇的元素所形成的路徑作為迷宮起點(diǎn)到終點(diǎn)的最短路徑。
[0035]在步驟D中,在選擇過程中,若存在多個(gè)元素具有需被選擇的元素值,則從該多個(gè)元素中隨機(jī)選擇一個(gè),并將被選擇的元素記錄至自定義的一維數(shù)組中。
[0036]下面舉一具體實(shí)施例介紹迷宮最短路徑的搜索方法:
[0037]預(yù)先設(shè)置一個(gè)用于存儲(chǔ)最短路徑的一維數(shù)組arrayShortPath和一個(gè)整體元素布局與迷宮的整體迷宮格布局相同的二維數(shù)組arrayPos,采用數(shù)組對(duì)迷宮信息進(jìn)行存儲(chǔ),數(shù)組的元素的值表示迷宮對(duì)應(yīng)位置的內(nèi)容。如圖2所示,黑色圖像的小格子表示迷宮障礙物,不可通過,其它未填充的格子表示空地,可以通過;左上角的虛線格子表示迷宮對(duì)應(yīng)位置為起點(diǎn),保證起點(diǎn)不可通過;右下角的虛線格子表示迷宮終點(diǎn),終點(diǎn)不可通過。在設(shè)計(jì)迷宮算法的過程中,首先將迷宮每一步分成若干個(gè)正方形的單元格,然后利用傳染的方式,就好比潑水出去水不斷擴(kuò)散直到起點(diǎn)流出,然后在可通過的路徑中查找出最短的一條路徑?!揪唧w實(shí)施方式】如下:
[0038]步驟a:如圖3所示,從終點(diǎn)開始,按順序依次找出所有走一步所能到達(dá)的格子,本發(fā)明實(shí)施例采取上_>下_>左_>右的順序,將終