#include <bits/stdc++.h>using namespacestd;intvis1[7];intvis2[7][7];intvis3[7][7][7];intvis4[7][7][7][7];intvis5[7][7][7][7][7];intvis6[7][7][7][7][7][7];intvis7[7][7][7][7][7][7][7];structnode{inta[7]; intstep;};BOOLCheckintA[],intNumintStep) {//check to have walked through if(num==1){ if(vis1[a[0]]>=0)return true; Else{vis1[a[0]]=step;return false;} } if(num==2){ if(vis2[a[0]][a[1]]>=0)return true; Else{vis[a[0]][a[1]]=step;return false;} } if(num==3){ if(vis3[a[0]][a[1]][a[2]]>=0)return true; Else{vis[a[0]][a[1]][a[2]]=step;return false;} } if(num==4){ if(vis4[a[0]][a[1]][a[2]][a[3]]>=0)return true; Else{vis[a[0]][a[1]][a[2]][a[3]]=step;return false;} } if(num==5){ if(vis5[a[0]][a[1]][a[2]][a[3]][a[4]]>=0)return true; Else{vis5[a[0]][a[1]][a[2]][a[3]][a[4]]=step;return false;} } if(num==6){ if(vis6[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]]>=0)return true; Else{vis6[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]]=step;return false;} } if(num==7){ if(vis7[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]][a[6]]>=0)return true; Else{vis7[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]][a[6]]=step;return false;} }}voidInite () {memset (vis1,-1,sizeof(VIS1)); memset (Vis2,-1,sizeof(VIS2)); memset (VIS3,-1,sizeof(VIS3)); memset (VIS4,-1,sizeof(VIS4)); memset (VIS5,-1,sizeof(VIS5)); memset (VIS6,-1,sizeof(VIS6)); memset (VIS7,-1,sizeof(VIS7));}voidBFsintCc[],intnum) {Node K;k.step=0;intb[7]; for(intI=0; i<num;i++) {k.a[i]=i;} Check (A,num,0); Queue<node>Que;que.push (); while(!Que.empty ()) {Node Top=que.top (); Que.pop (); for(intI=0; i<num;++i) b[i]=Top.a[i]; for(intI=0; i<num;++i) { intl=b[i]-1; intr=b[i]+1; if(l<0) l=-1; if(R>=num) r=-1; for(intj=0; j<i;++j)if(B[j]==b[i]) {l=r=-1;} for(intj=0; j<i;++j)if(b[j]==b[i]-1) {l=-1;} for(intj=0; j<i;++j)if(b[j]==b[i]+1) {r=-1;} if(l!=-1){ inttemp=B[i]; B[i]=l; node S; for(intj=0; j<num;++j) {s.a[j]=a[j];} S.step=Top.step; if(!Check (a,num,s.step)) {Que.push (s); } B[i]=temp; } if(r!=-1){ inttemp=B[i]; B[i]=R; node S; for(intj=0; j<num;++j) {s.a[j]=a[j];} S.step=Top.step; if(!Check (a,num,s.step)) {Que.push (s); } B[i]=temp; } } }}intMain () {intT; for(SCANF ("%d")) return 0;}
Beijing Network Race G BOXES State compression + ordered bfs+ high-dimensional array weight