迷宮尋路(A星尋路演算法)

2021-10-23 22:10:16 字數 2329 閱讀 8808

題目:假設我們有乙個7×5大小的迷宮,如下圖所示,綠色格仔表示起點,紅色的格仔表示終點,中間的3個深灰色格仔表示障礙物。請找到一條從起點到終點最短的路徑。

解題思路:

需要引入兩個集合和乙個公式,如下:

具體步驟:

把起點放入openlist;

檢查openlist中是否有值,如果沒有則無法到達終點,結束尋路;否則找出openlist中f值最小的方格作為當前方格;

找出當前方格上下左右所有可達的格仔,檢查他們是否在openlist或closelist中。如果不在,則將他們加入openlist,計算出相應的g、h、f值,並把當前格仔作為它們的「父節點」。

檢查openlist中是否含有終點格仔,如果有就結束;沒有則回到第二步。

**實現:

public

class

astarsearch,,

,,};

//每乙個格仔節點

static

class

grid

public

void

initgrid

(grid parent,grid end)

else

this

.h=math.

abs(

this

.x-end.x)

+math.

abs(

this

.y- end.y)

;this

.f=this

.g+this

.h;}

}public

static grid astarsearch

(grid start,grid end)

}//如果終點在openlist中,直接返回終點格仔

for(grid grid:openlist)}}

//openlist用盡,仍然找不到終點,說明終點不可到達,返回空

return null;

}private

static grid findmingrid

(arraylist

openlist)

}return tempgrid;

}private

static arraylist

findneighbors

(grid grid,list

openlist,list

closelist)if(

isvalidgrid

(grid.x,grid.y+

1,openlist,closelist))if

(isvalidgrid

(grid.x-

1,grid.y,openlist,closelist))if

(isvalidgrid

(grid.x+

1,grid.y,openlist,closelist)

)return gridlist;

}private

static

boolean

isvalidgrid

(int x,

int y,list

openlist,list

closelist)

//是否有障礙物

if(maze[x]

[y]==1)

//是否已經在openlistif(

containgrid

(openlist,x,y)

)//是否已經在closelist中if(

containgrid

(closelist,x,y)

)return

true;}

private

static

boolean

containgrid

(list

grids,

int x,

int y)

}return

false;}

public

static

void

main

(string[

] args)

//刪除迷宮和路徑,路徑用*表示

for(

int i=

0;i)else

} system.out.

println()

;}}}

python迷宮尋路 迷宮尋路問題 A 演算法

迷宮尋路問題 a 演算法 迷宮尋路問題是人工智慧中的有趣問題,如何表示狀態空間和搜尋路徑是尋路問題的重點,本文的主要內容是a 搜尋演算法的理解和應用,首先對基本知識和演算法思想進行了解,再通過其對迷宮問題求解應用,編寫 python 程式進行深入學習。1.搜尋區域 我們假設某個人要從 start 點...

A星尋路演算法介紹

你是否在做一款遊戲的時候想創造一些怪獸或者遊戲主角,讓它們移動到特定的位置,避開牆壁和障礙物呢?如果是的話,請看這篇教程,我們會展示如何使用a星尋路演算法來實現它!在網上已經有很多篇關於a星尋路演算法的文章,但是大部分都是提供給已經了解基本原理的高階開發者的。本篇教程將從最基本的原理講起。我們會一步...

迷宮尋路(bfs)

第一次寫部落格,希望能把基礎的演算法記錄下來,以後快要忘記了可以拿來複習。題目 輸入輸出要求 樣例 輸入樣例 8 8 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1...