四種尋路演算法並比較

2021-08-25 07:00:10 字數 1374 閱讀 8239

四種演算法是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( ) //找到下乙個移動方向。這一段程式有些亂, //仔細看! if (act[level]==0) return order[0]; order[1]=-1; for (i=0;i<4;i++) if ((dis[i]==t)&&(i!=(order[0]-1))) if (order[1]!=-1) } else } if (act[level]==order[0]) return order[1]; if (act[level]==order[1]) return order[2]; if (act[level]==order[2]) return order[3]; if (act[level]==order[3]) return 5; }

四種尋路演算法並比較

好久沒搞這些東西了.想了十分鐘才勉強回憶起來.寫了三個鐘頭.好累啊.四種演算法是dfs,bfs,heuristic dfs,heuristic bfs a 用了兩張障礙表,一張是典型的迷宮 char block sy sx 第二張是刪掉一些障礙後的 char block sy sx 結果 嘗試節點數...

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

簡單並查集 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小時內發生變化的資料。變化資料捕獲也是建立準實時資料倉儲的關鍵技術。當你能夠識別並獲得最近發生變化的資料時,抽取及其後面的轉換 裝載操作顯然...