You are on page 1of 2

#include<bits/stdc++.

h>
using namespace std;
typedef long long int lli;
lli mod=1000000007;
map <vector<vector<int>>, int> vis;

lli dfs(vector<vector<int>>& curr, vector<vector<int>>& end){


static lli moves=0;
vis[curr]=1;
if(vis[end]==1){
return moves;
}
moves++;
pair<int,int> p;
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
//cout<<curr[i][j]<<" ";
if(curr[i][j]==0)
p={i,j};
}
//cout<<endl;
}
if(p.first>0){
vector<vector<int>> temp=curr;
swap(temp[p.first][p.second],temp[p.first-1][p.second]);
if(!vis[temp])
dfs(temp,end);
}
if(p.second>0){
vector<vector<int>> temp=curr;
swap(temp[p.first][p.second],temp[p.first][p.second-1]);
if(!vis[temp])
dfs(temp,end);
}
if(p.first<2){
vector<vector<int>> temp=curr;
swap(temp[p.first][p.second],temp[p.first+1][p.second]);
if(!vis[temp])
dfs(temp,end);
}
if(p.second<2){
vector<vector<int>> temp=curr;
swap(temp[p.first][p.second],temp[p.first][p.second+1]);
if(!vis[temp])
dfs(temp,end);
}
return moves;
}

int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
vector<vector<int>> start(3);
vector<vector<int>> end(3);
cout<<"Enter start matrix:"<<endl;
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
int ele;
cin>>ele;
start[i].push_back(ele);
}
}
cout<<"Enter end matrix:"<<endl;
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
int ele;
cin>>ele;
end[i].push_back(ele);
}
}
cout<<"Number of moves: "<<dfs(start,end)<<endl;
}

You might also like