POJ 1077 Eight(雙向BFS 判重)

2021-06-18 21:32:27 字數 772 閱讀 9520

hdu也有這道題但是資料比較強,我的**過不了(記憶體超限了。。)。只能過poj的。。

這是某大神的。。

我的**。。

用了stl這是速度慢的乙個重要原因。。

#include#include#include#include#include#include#includeusing namespace std;

struct state

;int convers(state t)

int m[5][3]= ,,,};

mapmp1,mp2;

mapph1,ph2;

int main()

else if(str[i]=='x')

}mp1.clear();

mp2.clear();

ph1.clear();

ph2.clear();

mp1[convers(st)]=true;

bool ok=false;

string ans;

if(convers(st)!=123456780)

else a1=true;

if(!q2.empty())

else a2=true;

for(int i=0; i<4&&!ok&&!a1; ++i)

else}}

for(int i=0; i<4&&!ok&&!a2; ++i)

else}}

}}

else ok=true;

if(ok) cout<

poj 1077 八數碼難題

終於自己ac了這道八數碼難題,用的方法是最最普通的單項bfs hash,這裡主要的難點在於如何儲存狀態,其實,在八數碼裡所有的狀態共有9!種 362880種,所以在每個轉台節點,我需要乙個char state 3 3 來記錄當前棋盤的狀態,用乙個int x,y來記錄當前x的位置,用char oper...

POJ1077 Eight A 康托展開

題目大意 乙個3 3的棋盤上有8個格仔寫著1 8的數字,還有乙個空格,給定局面,要求給出乙個空格的移動序列,使得達到目標狀態 1 2 3 4 5 6 7 8 x 空格 做法 大名鼎鼎的八數碼問題.學習了a 演算法後,今天特意去試做了了下,居然過了,資料好水啊.題目中的狀態可以用0 8的全排列表示,可...

POJ1077 經典的八數碼問題

很經典的八數碼問題,可以用單向廣度優先搜尋 雙向廣度優先搜尋 a 演算法 ida演算法解。用了雙向廣度優先搜尋和a 演算法解,在用a 演算法時,糾結了好幾天,後來在網上看了乙份部落格才發現自己錯在哪。之後解出來了。雖然做這題時很糾結,不過收穫真的很大,痛而快樂著 下面貼出用雙向廣度優先搜尋和a 演算...