廣度優先搜尋 經典的8數碼問題

2021-06-25 20:22:15 字數 792 閱讀 9621

話不多說,直接貼**吧~

//廣度搜尋-8數碼問題 

#include #include using namespace std;

const int max = 8;

const int all = 363000; //總的個數有9!= 362880,故取363000

int fac[max] = ; //康托展開需要用到的工具

char a[all][9];

bool visit[all];

char goal[9];

int dis[all];

int dir[4][2]=,,,}; //搜尋時用到的四個方向

void init(); //輸入,以及初始化fac

int getvalue(char* s); //康托展開來hash化局面!!!

bool check(int head); //check是否已經到達目的狀態

int bfs(); //所有是搜尋過程!

int main()

void init()

} ++head;

} }

今天剛學了「寬搜」,見識到了神奇的「康托展開」的hash化的方式,也懂得了「康托逆展開」的方法,明天我會把這兩個的**也放上來!

寬搜的精髓,個人覺得在於兩個點——

1. 如何如何構造搜尋樹

2. 如何判斷局面重複

只要做好這兩個點,其他的,水到渠成!!!加油,明天繼續做多點「寬搜」題目,為了明天下午的ccf認證!!!

廣度優先搜尋 八數碼問題

給定乙個一幅圖和乙個起點s,回答 從s到給定的頂點v是否存在一條路徑?如果有,找出其中最短的那條 所含邊數最少 邊數最少,很自然想到從從經過1條邊能到達的節點有哪些?然後經過這些邊再到達的節點有哪些?這樣我不就能夠想出來最短的路徑了嗎?沒錯,這是非常簡單的想法,然而真正的廣度優先演算法也是這樣,簡單...

八數碼問題(bfs廣度優先搜尋)

最近在學bfs,覺得這個題不錯,自己沒做出來,去網上搜了一下,又結合了我自己的想法,ac了 這個看起來用dfs比較好做,但是會超時好像,所以肯定用bfs了。問題描述 在九宮格裡放在1到8共8個數字還有乙個是x,與x相鄰的數字可以移動到x的位置,問給定的狀態最少需要幾步能到達目標狀態 1 2 3 4 ...

廣度優先搜尋解決八數碼問題

程式描述 基於盲目搜尋策略的寬度優先搜尋方法 include include include include include include include using namespace std define n 9 九宮格總數字 陣列定義 0 9階乘定義 const int jc n 1 0 9...