IDA*求助,70ptr,然而第三个样例都没过,有大佬看看怎么回事吗
  • 板块P5507 机关
  • 楼主2408727188GHR
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/23 16:59
  • 上次更新2023/10/27 06:17:27
查看原帖
IDA*求助,70ptr,然而第三个样例都没过,有大佬看看怎么回事吗
234964
2408727188GHR楼主2022/10/23 16:59

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 << " ";
	}
}
2022/10/23 16:59
加载中...