日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 编写推箱子报告_Java推箱子怎么写啊?

發布時間:2025/3/15 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 编写推箱子报告_Java推箱子怎么写啊? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

展開全部

這是我之前寫的一篇java實現推箱子算法的文章,簡單的給你看一下:

《推箱子游戲》是一款益智32313133353236313431303231363533e59b9ee7ad9431333431353364游戲,游戲目標是搬運工自己來找出到某個位置的最短路徑,然后自己走過去。

地圖是這個游戲中非常重要的一部分,關于地圖的存儲,因為有一部分元素是可以重疊放置的,所以用了一個類似二進制的存儲方式,就是4種物件分別有是否存在狀態,使得用一個數字可以表示多個物件。

1、是否存在目的地

2、是否存在箱子

3、是否存在人

4、是否存在墻壁

這樣就解決了地圖存儲問題。使用short[][]就存下了。

一、在不移動箱子的情況下其實無論人在哪里對于map來說是沒有影響的,所以填充可移動區域可以讓需要存儲地圖的數量有一個大的下降。例如之前那副地圖:

8888888

8103018

8002008

8320238

8012108

8403008

8888888

經過變換之后就成了:

8888888

8103018

8002008

8320238

8452108

8443008

8888888

這樣就把存儲量縮小了四分之三。至于怎樣填充,相信對圖論有一點了解的都可以隨便想出方案,我這里用的是BFS。

話不多說,實現代碼如下:

二、關于箱子的移動方式,直接用整幅地圖的BFS搜索會比較靠譜。因為可以確定箱子的位置和在不移動箱子情況下人能到的位置,所以箱子可移動的位置也就能確定了,再加上之前存儲的所有箱子的位置,這樣就能計算出箱子每動作一次地圖能更新的情況,一次BFS就是每個箱子往不同可移動位置進行一次移動。

三、結束搜索分為三種情況:

所有目的地被填充完畢-------計算完成退出程序。

有箱子被推到角落并且不是在目的地--------說明不是正確的路線,搜索不再往下走。

當前地圖在以前已經被達成過--------說明是重復路線,搜索不再往下走。

四、關于地圖的存儲,用的是hashSet,并重寫了equals和hashCode的實現,用來自動判斷地圖是否重復。(以此保證不重復)

最后完成地圖顯示問題,每個節點存儲自己父親節點的地址,當節點發現自己已經完成之后根據地址向上查找直到樹頂,望采納,謝謝。

總結

以上是生活随笔為你收集整理的Java 编写推箱子报告_Java推箱子怎么写啊?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。