求助:为什么构造函数里面不加if(((s>>(i*2))&3)!=0)会全部tle,这样能慢多少。。
#include<bits/stdc++.h>
using namespace std;
const int maxn=(1<<24);
int f[maxn],g[maxn],ch[maxn],ans[maxn],nxt[12][4],st;
struct node{
int state;
double F;
node(int s):state(s){
F=0;
for(int i=0;i<12;i++){
if(((s>>(i*2))&3)!=0)
F+=4-((s>>(i*2))&3);
}
F=F+g[s];
}
bool operator < (const node y)const{
return this->F > y.F;
}
};
priority_queue<node> que;
int main(){
int b;
for(int i=0;i<12;i++){
cin>>b;
b--;
st|=(b<<(i*2));
for(int j=0;j<4;j++){
cin>>nxt[i][j];
nxt[i][j]--;
}
}
que.push(node(st));
while(!que.empty()){
int state=que.top().state;
que.pop();
if(state==0)break;
for(int i=0;i<12;i++){
int si=(state>>(i*2))&3;
int nx=nxt[i][si];
int nxSi=(state>>(nx*2))&3;
int nxst=state^(si<<(i*2))^(((si+1)&3)<<(i*2));
nxst=nxst^(nxSi<<(nx*2))^(((nxSi+1)&3)<<(nx*2));
if(!g[nxst]){
f[nxst]=state;
ch[nxst]=i+1;
g[nxst]=g[state]+1;
que.push(node(nxst));
}
}
}
int state=0,cnt=0;
while(state!=st){
ans[++cnt]=ch[state];
state=f[state];
}
cout<<cnt<<endl;
for(int i=cnt;i>=1;i--){
cout<<ans[i]<<" ";
}
return 0;
}