題意:略;
思路:其實怎麼看也是打表的思路比較容易想一些,不過a*搜尋真是神奇。。。而且打表快不少,可能和多組資料有關,其實a*也可以記憶化一下應付一下多組資料,大概也會快不少吧。。。
思路很簡單,從最終狀態反向暴力bfs就可以了。。因為所有狀態也已9!不是很多,主要用hash來去重就可以了。思維含量比a*簡單。。
**:
#include using namespace std;
const int dis[12] = ;
int tmp[10];
char s[10];
const int maxn=1e5*4;
int arr[10];
int vis[maxn];
int last[maxn+10];
int how[maxn+10];
int ans=-1;
int cantor(int x, int len)
int resl = 1;
for(int i = 0; i < len; i++)
}resl = resl + dis[len-i-1] * counts;
}return resl;
}int tran(int x,int h)
if(h==0)
else if(h==1)
else if(h==2)
else if(h==3)
for(int i=0,j=1;i<9;i++,j*=10) ret+=tmp[i]*j;
return ret;
}struct node;
node(int b,int c):num(b),id(c){};
};bool astar()}}
return false;
}char re[maxn];
void pr(int x)
for(int i=0;i>s[0]>>s[1]>>s[2]>>s[3]>>s[4]>>s[5]>>s[6]>>s[7]>>s[8])
int ret=0;
for(int i=0,j=1;i<9;i++,j*=10) ret+=arr[i]*j;
if(ret==987654321) puts("");
else if(vis[cantor(ret,9)]!=-1)
else
}return 0;
}
hdu 1043 八數碼 打表
題意 略 思路 其實怎麼看也是打表的思路比較容易想一些,不過a 搜尋真是神奇。而且打表快不少,可能和多組資料有關,其實a 也可以記憶化一下應付一下多組資料,大概也會快不少吧。思路很簡單,從最終狀態反向暴力bfs就可以了。因為所有狀態也已9!不是很多,主要用hash來去重就可以了。思維含量比a 簡單。...
HDU1043 八數碼問題
include include include using namespace std 通過康托展開來hash 9 有362880 const int maxn 400000 int step maxn int p maxn 2 用於記錄與前面乙個的相對路徑 int d 10 用來統計0到9的階乘 ...
HDU 1043 八數碼問題 A 搜尋
by cxlove 第乙個a 搜尋,a 是一種啟發式搜尋,g為已花代價,h為估計的剩餘代價,而a 是根據f g h作為估價函式進行排列,也就是優先選擇可能最優的節點進行擴充套件。對於八數碼問題,以下幾個問題需要知道 判斷有無解問題 根據逆序數直接判斷有無解,對於乙個八數碼,依次排列之後,每次是將空位...