話不多說,直接貼**吧~
//廣度搜尋-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...