hdu 1043 八數碼 打表

2022-08-19 20:33:08 字數 1202 閱讀 2862

題意:略;

思路:其實怎麼看也是打表的思路比較容易想一些,不過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作為估價函式進行排列,也就是優先選擇可能最優的節點進行擴充套件。對於八數碼問題,以下幾個問題需要知道 判斷有無解問題 根據逆序數直接判斷有無解,對於乙個八數碼,依次排列之後,每次是將空位...