题意:
这里写链接内容
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
#include<map>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
#define maxn 400
map<string,int> mp;
ll dir[4]={1,-1,-4,4};
void bfs(string ss){
queue<string> que;
que.push(ss);
mp[ss]=1;
while(!que.empty()){
string s;
s=que.front(); que.pop();
for(int i=0;i<4;i++){
ll pos=s.find('0');
ll nx=pos+dir[i]; //可能移动数字的位置
////空格在3的时候,4不能挪动,因为3 4 不相邻,反之同理
if(nx<0||nx>7||(pos==4&&nx==3)||(pos==3&&nx==4))
continue;
string q=s; //为了记录下面一个状态
swap(q[pos],q[nx]); //移动物块
if(!mp[q]){
que.push(q);
mp[q]=mp[s]+1;
}
}
}
}
int main(){
int num;
string st="01234567"; //起始状态
bfs(st); //把由起点开始出发的所有状态算出来
while(cin>>num){
st[0]=num+'0';
for(int i=1;i<8;i++){
cin>>num;
st[i]=num+'0';
}
cout<<mp[st]-1<<endl;
}
return 0;
}