#include<iostream>

#include<cstdio>

#include<algorithm>

#include<cmath>

#include<cstring>

#include<vector>

#include<utility>

#include<map>

#include<stack>

#include<sstream>

#include<math.h>

#include<bitset>

#include<queue> 

#include<set>

using namespace std;

int mp[5][5];

int r[5][5];

int xx;

string s1;

string s2;

int road[4][2]={{-1,0},{0,-1},{1,0},{0,1}};

bool in(int x,int y){

return x>=0&&x<3&&y>=0&&y<3;

struct node{

int k;

int dept;

string sk;

    node(int dk,int dd,string sss){

    k=dk;

    dept=dd;

    sk=sss;

    }

};

int bfs(int x){

queue<node>q;

q.push(node(x,0,s1));

set<string>cnt;

cnt.insert(s1);

while(!q.empty()){

node now=q.front();

q.pop();

int kx=now.k/3;

int ky=now.k-(kx*3);

for(int i=0;i<4;i++){

int dx=kx+road[i][0];

int dy=ky+road[i][1];

int tk=3*dx+dy;

string tmp=now.sk;

    if(in(dx,dy)){

    tmp[now.k]=tmp[tk];

    tmp[tk]='.';

    if(cnt.find(tmp)==cnt.end()){

    if(tmp==s2){

    return now.dept+1;

    }

    cnt.insert(tmp);

    q.push(node(tk,now.dept+1,tmp));

    }

    }

}

return -1;

}

int main(){

cin>>s1;

for(int i=0;i<s1.length();i++){

if(s1[i]=='.'){

xx=i;

}

}

cin>>s2;

int kk=bfs(xx);

cout<<kk<<endl;

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论