IDA*求助,70ptr,然而第三个样例都没过,有大佬看看怎么回事吗
#include<bits/stdc++.h>
using namespace std;
int nxt[13][5];
int state, maxdep;
bool flag = 0;
vector<int> ans, tmp;
int h() {
int ans = 0;
for (int i = 0; i < 12; i++) {
int istate = ((state >> (i * 2)) & 3);
if(istate)
ans += 4 - istate;
}
return ans;
}
void dfs(int dep) {
if (state == 0) {
flag = 1;
return;
}
if (dep + h() > maxdep) {
return;
}
for (int i = 0; i < 12 && !flag; i++) {
int ori = state;
int istate = ((state >> (i * 2)) & 3);
int eng = nxt[i][istate];
int engstate = ((state >> (eng * 2)) & 3);
int nxtistate = (istate + 1) & 3;
int nxtengstate = (engstate + 1) & 3;
state ^= istate << (i * 2);
state ^= engstate << (eng * 2);
state ^= nxtistate << (i * 2);
state ^= nxtengstate << (eng * 2);
tmp.push_back(i + 1);
dfs(dep + 1);
if (flag) {
return;
}
tmp.pop_back();
state ^= istate << (i * 2);
state ^= engstate << (eng * 2);
state ^= nxtistate << (i * 2);
state ^= nxtengstate << (eng * 2);
}
}
int main() {
ios::sync_with_stdio(0);
for (int i = 0; i < 12; i++) {
int st; cin >> st; st--;
state |= st << (i * 2);
for (int j = 0; j < 4; j++) {
cin >> nxt[i][j];
nxt[i][j]--;
}
}
int start = state;
for (maxdep = 0; maxdep <= 100; maxdep++) {
if (flag)
break;
dfs(0);
}
cout << tmp.size() << endl;
for (int i : tmp) {
cout << i << " ";
}
}