
My code:
#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
char a[2000][2000];int b[2000][2000],cs[50][50],n,m,wyy,jbl;
bool flag=false;
void adg(char ds,int x,int y)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]==ds&&i!=x&&j!=y)
{
wyy=i;
jbl=j;
//cout << wyy << " " << jbl << endl;
return ;
}
}
}
}
void bfs(int p,int q)
{
int x,y,h,t;
int lg[10005][5];
h=0;
t=1;
lg[1][1]=p;
lg[1][2]=q;
lg[1][3]=0;
b[p][q]=1;
do
{
h++;
for(int i=0;i<4;i++)
{
x=lg[h][1]+dx[i];
y=lg[h][2]+dy[i];
if(x>=0&&x<n&&y>=0&&y<m&&b[x][y]==0&&a[x][y]!='1')
{
if(a[x][y]!='0')
{
t++;
adg(a[x][y],x,y);
lg[t][1]=wyy;
lg[t][2]=jbl;
lg[t][3]=lg[h][3]+1;
}
else
{
t++;
lg[t][1]=x;
lg[t][2]=y;
lg[t][3]=lg[h][3]+1;
b[x][y]=1;
}
if(x==n-1&&y==m-1)
{
cout << lg[t][3];
flag=true;
return ;
}
//cout << lg[t][1] << " " << lg[t][2] << endl;
}
}
}while(h<t);
}
int main()
{
cin >> n >> m;
for(int i=0;i<n;i++)
{
string s;
cin >> s;
for(int j=0;j<m;j++)
{
a[i][j]=s[j];
}
}
bfs(0,0);
/*for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout << a[i][j];
}
cout << endl;
}*/
if(flag==false) cout << "No Solution.";
return 0;
}