四種尋路演算法並比較

2021-04-14 15:27:53 字數 1327 閱讀 8639

好久沒搞這些東西了...想了十分鐘才勉強回憶起來...

寫了三個鐘頭...好累啊...

四種演算法是dfs,bfs,heuristic dfs, heuristic bfs (a*)

用了兩張障礙表,一張是典型的迷宮:

char block[sy][sx]=,,

,,,,

,,,};

第二張是刪掉一些障礙後的:

char block[sy][sx]=,,

,,,,

,,,};

結果:嘗試節點數 合法節點數 步數

深度優先 416/133 110/43 19/25

廣度優先 190/188 48/49 19/15

深度+啟發 283/39 82/22 19/19

廣度+啟發 189/185 48/49 19/15

所以可以看出深度+啟發是最好的,效率高路徑也挺短。a*第一是不真實二是慢三是空間消耗較大。

附:dfs+heu的源程式,bc++ 3.1通過

#include

#include

#include

#define sx 11 //寬

#define sy 10 //長

int dx[4]=; //四種移動方向對x和y座標的影響

int dy[4]=;

/*char block[sy][sx]= //障礙表,,

,,,,

,,,};*/

char block[sy][sx]= //障礙表,,

,,,,

,,,};

int maxact=4; //移動方向總數

char table[sy][sx]; //已到過標記

int level=-1; //第幾步

int levelcomplete=0; //這一步的搜尋是否完成

int allcomplete=0; //全部搜尋是否完成

char act[1000]; //每一步的移動方向,搜尋1000步,夠了吧?

int x=1,y=1; //現在的x和y座標

int targetx=9,targety=8; //目標x和y座標

int sum1=0,sum2=0;

void test( );

void back( );

int actok( );

int getnextact( );

void main( )

else}}

}void test( )

void back( )

int getnextact( ) //找到下乙個移動方向。這一段程式有些亂,

//仔細看!

四種尋路演算法並比較

四種演算法是dfs,bfs,heuristic dfs,heuristic bfs a 用了兩張障礙表,一張是典型的迷宮 char block sy sx 第二張是刪掉一些障礙後的 char block sy sx 結果 嘗試節點數 合法節點數 步數 深度優先 416 133 110 43 19 2...

演算法 並查集(四種方式)

簡單並查集 public class unionfind public int getcount public boolean connected int p,int q public int find int p public void union int p,int q 快速並查集 public...

四種CDC方案比較

抽取處理需要重點考慮增量抽取,也被稱為變化資料捕獲,簡稱cdc。假設乙個資料倉儲系統,在每天夜裡的業務低峰時間從操作型源系統抽取資料,那麼增量抽取只需要過去24小時內發生變化的資料。變化資料捕獲也是建立準實時資料倉儲的關鍵技術。當你能夠識別並獲得最近發生變化的資料時,抽取及其後面的轉換 裝載操作顯然...