HDU 1043(康拓展開 BFS 八數碼問題)

2021-08-28 03:53:26 字數 1015 閱讀 8302

題意:給定乙個現有的九宮格布局,請輸出將它移動至初始狀態的移動方法的步驟。

思路:自己沒什麼思路。學了康拓展開,看了別人的部落格才理解了,暫且先放著別人的**,,等自己實力足夠了再自己寫試試

//hdu1043-經典bfs-八數碼

//多組資料-需要計算全部路徑後直接輸出(poj1077資料較弱)

//反向搜尋+打表(離線)

//time:109ms memory:25412k

#include#include#include#includeusing namespace std;

#define max 400000

#define aim 46234 //123456780對應的康托hash值

bool v[max];

char path[max][40]; //總路徑

int len; //路徑長

/*udlr*/

char *dir = "durl"; //反向搜尋

int mov[4][2] = , , , };

//八數碼狀態結構體

struct noden[max];

int fac[10] = ;

//康托逆展開-返回hash值

int inverse_cantor(int s[9])

return sum + 1;

}/*反向記錄路徑*/

void count_path(node end)

}void bfs()

}head++;

}}int main()

cur.status = inverse_cantor(cur.s);

/*output*/

if (v[cur.status])

printf("%s\n", path[cur.status]);

else

printf("unsolvable\n");

}return 0;

}

BFS拓展 康拓展開

原諒我我實在不想粘題目了 這道題吧,本來不想加進來的。其實就是對於八數碼問題的乙個補充,上面可愛的出題人已經將康拓展開講的很清楚了。照著敲就行。include using namespace std typedef long long ll inline ll read const ll maxn ...

HDU 1043 八數碼問題 雙向BFS

題目鏈結 題意 給你乙個初始狀態,問你能否移動到最終的完成狀態,如果能輸出任意一組解,否則輸出unsolved。思路 乍一看是個bfs,但是狀態過多會tle或者mle,但是除可bfs確實沒得寫了,這時候就要用到雙向bfs了,起點終點同時bfs,判斷相遇,路徑用string 就行了。注意點 正向路徑s...

HDU 1043 Eight(康托展開 BFS)

八數碼問題,輸入9個字元代表乙個3 3的棋盤,對於能還原的輸入,輸出一段包含 u d l r 操作的操作序列,不能還原的輸入輸出 unsolvable 輸入有多組,所以考慮先預處理出所有情況的操作序列,再根據輸入進行輸出 因為要遍歷所有情況,所以選擇 bfs 即可,從結果出發,每操作一次,儲存一次該...