题目:P1379 八数码难题
经典算法教材题目,然后我决定用 hash + BFS 搞一下,解释代码附上:
# include <iostream>
# include <string>
using namespace std;
string strat, end = "123804765", que[1000000]; //strat输入和取队列头,end终点,que队列
int move[5] = {0,1,-1,3,-3}, from, to, lest[1000000];//move移动方向,from队列头,to队列尾,lest存步数
bool vis[10000000]; // 字符串对应hash值在vis里是否有过
int hash(string s) { // 求字符串的hash值
long long ans = 0;
for(int i = 0; i < s.size(); i++) ans = ans * 33 + s[i] - '0'; // 这里我用hash time 33,自己百度了解
return ans % 10000000; // mod 10000000 ,因为我vis开的也那么大,开小点过不了
}
string swop(int i, int j, string s) { // 在s串中,交换i和j位置的值
char t = s[i]; s[i] = s[j]; s[j] = t; return s;
}
int main() {
cin &g