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 演算...