#include <iostream>
#include<queue>
#include<list>
#include<cstring>
using namespace std;
class graph{
int v;
list<int> *adj;
public:
graph(int val)
{
v =val;
adj = new list<int>[v];
}
void addEdge(int x,int y)
{
adj[x].push_back(y);
}
bool checkpath(int src,int dest)
{
int *vis = new int[v];
memset(vis,0, v);
queue<int >qu;
qu.push(src);
vis[src]=1;
while(!qu.empty())
{
int x = qu.front();
qu.pop();
if(x ==dest)
{
cout<<"there is path betw src and dest"<<endl;
return true;
}
//if(vis[x]==0)
//{
//for(int i=0;i<adj[x].size();i++)
for(auto it = adj[x].begin();it!=adj[x].end();it++)
{
if(*it ==dest)
return true;
if(vis[*it]==0)
{
qu.push(*it);
vis[*it]=1;
}
else
{
cout<<"cycle found"<<endl;
//return false;
}
}
//}
}
return false;
}
};
int X[8] = { -2, -1, 1, 2, -2, -1, 1, 2 };
int Y[8] = { -1, -2, -2, -1, 1, 2, 2, 1 };
void shortestpath(int n,int x,int y,int xt,int yt)
{
int vis[n+1][n+1];
memset(vis,0,sizeof(vis));
queue<pair<int,int>> qu;
qu.push(make_pair(x,y));
int dis[n+1][n+1];
//memset(dis,100,sizeof(dis));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
dis[i][j] = 100;
int min_setp=100;
vis[x][y]=1;
while(!qu.empty())
{
pair<int,int>vt = qu.front();
qu.pop();
if(vt.first == xt && vt.second ==yt)
{
cout<<"target reahched"<<endl;
break;
}
//cout<<vt.first<<" "<<vt.second<<endl;
for(int i=0;i<8;i++)
{
int x_tmp = vt.first + X[i];
int y_tmp = vt.second + Y[i];
if(x_tmp > n || x_tmp <=0 || y_tmp >n || y_tmp <=0)continue;
if(vis[x_tmp][y_tmp]==0)
{
qu.push(make_pair(x_tmp,y_tmp));
vis[x_tmp][y_tmp]=1;
if(dis[x_tmp][y_tmp] > dis[x][y] + 1)
{
dis[x_tmp][y_tmp] = dis[x][y] + 1;
}
}
}
}
cout<<dis[xt][yt]<<endl;
}
int main() {
// your code goes here
graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
shortestpath(30,1,1,30,30);
// if(g.checkpath(1,3))
//cout<<"path excist"<<endl;
//else cout<<"no path"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxxdWV1ZT4KI2luY2x1ZGU8bGlzdD4KI2luY2x1ZGU8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGdyYXBoewoJCiAgaW50IHY7CiAgbGlzdDxpbnQ+ICphZGo7CiAgcHVibGljOgogIGdyYXBoKGludCB2YWwpCiAgewogIAl2ID12YWw7IAogIAlhZGogPSBuZXcgbGlzdDxpbnQ+W3ZdOwogIH0KICB2b2lkIGFkZEVkZ2UoaW50IHgsaW50IHkpCiAgewogICAgIGFkalt4XS5wdXNoX2JhY2soeSk7CiAgfQogIAogIGJvb2wgY2hlY2twYXRoKGludCBzcmMsaW50IGRlc3QpCiAgewogIAlpbnQgKnZpcyA9ICBuZXcgaW50W3ZdOwogIAltZW1zZXQodmlzLDAsIHYpOwogIAlxdWV1ZTxpbnQgPnF1OwogIAlxdS5wdXNoKHNyYyk7CiAgCXZpc1tzcmNdPTE7CiAgICB3aGlsZSghcXUuZW1wdHkoKSkKICAgIHsKICAgIAlpbnQgeCA9IHF1LmZyb250KCk7CiAgICAJcXUucG9wKCk7CiAgICAJaWYoeCA9PWRlc3QpCiAgICAJewogICAgCSAgY291dDw8InRoZXJlIGlzIHBhdGggYmV0dyBzcmMgYW5kIGRlc3QiPDxlbmRsOwkKICAgIAkgcmV0dXJuIHRydWU7CiAgICAJfQogICAgCQogICAgCS8vaWYodmlzW3hdPT0wKQogICAgCS8vewogICAgCSAgLy9mb3IoaW50IGk9MDtpPGFkalt4XS5zaXplKCk7aSsrKQogICAgCSAgZm9yKGF1dG8gaXQgPSBhZGpbeF0uYmVnaW4oKTtpdCE9YWRqW3hdLmVuZCgpO2l0KyspCiAgICAJICB7CiAgICAJICAJaWYoKml0ID09ZGVzdCkKICAgIAkgIAlyZXR1cm4gdHJ1ZTsKICAgIAkgIAlpZih2aXNbKml0XT09MCkKICAgIAkgIAl7CiAgICAJICAJCXF1LnB1c2goKml0KTsKICAgIAkgIAkJdmlzWyppdF09MTsKICAgIAkgIAl9CiAgICAJICAJZWxzZQogICAgCSAgCXsKICAgIAkgIAkJY291dDw8ImN5Y2xlIGZvdW5kIjw8ZW5kbDsKICAgIAkgIAkJLy9yZXR1cm4gZmFsc2U7CiAgICAJICAJfQogICAgCSAgfQogICAgCS8vfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICAJCn07CgppbnQgWFs4XSA9IHsgLTIsIC0xLCAxLCAyLCAtMiwgLTEsIDEsIDIgfTsKaW50IFlbOF0gPSB7IC0xLCAtMiwgLTIsIC0xLCAxLCAyLCAyLCAxIH07CgoKdm9pZCBzaG9ydGVzdHBhdGgoaW50IG4saW50IHgsaW50IHksaW50IHh0LGludCB5dCkKewoJaW50IHZpc1tuKzFdW24rMV07IAoJbWVtc2V0KHZpcywwLHNpemVvZih2aXMpKTsKIAlxdWV1ZTxwYWlyPGludCxpbnQ+PiBxdTsKIAlxdS5wdXNoKG1ha2VfcGFpcih4LHkpKTsKIAlpbnQgZGlzW24rMV1bbisxXTsKIAkvL21lbXNldChkaXMsMTAwLHNpemVvZihkaXMpKTsKIAlmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKQogICAgICAgICAgICBkaXNbaV1bal0gPSAxMDA7CiAgCiAJaW50IG1pbl9zZXRwPTEwMDsKIAl2aXNbeF1beV09MTsKIAl3aGlsZSghcXUuZW1wdHkoKSkKIAl7ICAKIAkJcGFpcjxpbnQsaW50PnZ0ID0gcXUuZnJvbnQoKTsKIAkJcXUucG9wKCk7CiAJCWlmKHZ0LmZpcnN0ID09IHh0ICYmIHZ0LnNlY29uZCA9PXl0KQogCSAgICB7CiAJICAgICAgCWNvdXQ8PCJ0YXJnZXQgcmVhaGNoZWQiPDxlbmRsOwogCSAgICAgIAlicmVhazsKIAkgICAgfQogCSAgICAvL2NvdXQ8PHZ0LmZpcnN0PDwiICI8PHZ0LnNlY29uZDw8ZW5kbDsgCiAJICAgIGZvcihpbnQgaT0wO2k8ODtpKyspCiAJICAgIHsKIAkgICAgICBpbnQgeF90bXAgPSB2dC5maXJzdCAgKyBYW2ldOwogCSAgICAgIGludCB5X3RtcCA9IHZ0LnNlY29uZCArIFlbaV07CiAJICAgICAgaWYoeF90bXAgPiBuIHx8IHhfdG1wIDw9MCB8fCB5X3RtcCA+biB8fCB5X3RtcCA8PTApY29udGludWU7CiAJICAgICAgaWYodmlzW3hfdG1wXVt5X3RtcF09PTApCiAJICAgICAgewogCSAgICAgIAlxdS5wdXNoKG1ha2VfcGFpcih4X3RtcCx5X3RtcCkpOwogCSAgICAgIAl2aXNbeF90bXBdW3lfdG1wXT0xOwogCiAJICAgICAgCWlmKGRpc1t4X3RtcF1beV90bXBdID4gZGlzW3hdW3ldICsgIDEpCiAJICAgICAgCXsKIAkgICAgICAJCWRpc1t4X3RtcF1beV90bXBdID0gIGRpc1t4XVt5XSArIDE7CiAJICAgICAgCX0KCiAJICAgICAgfQogCSAgICAgIAogCSAgICB9CiAJfQogIAogIGNvdXQ8PGRpc1t4dF1beXRdPDxlbmRsOwp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWdyYXBoIGcoNCk7CiAgICBnLmFkZEVkZ2UoMCwgMSk7CiAgICBnLmFkZEVkZ2UoMCwgMik7CiAgICBnLmFkZEVkZ2UoMSwgMik7CiAgICBnLmFkZEVkZ2UoMiwgMCk7CiAgICBnLmFkZEVkZ2UoMiwgMyk7CiAgICBnLmFkZEVkZ2UoMywgMyk7CiAgICAKICAgIHNob3J0ZXN0cGF0aCgzMCwxLDEsMzAsMzApOwogICAvLyBpZihnLmNoZWNrcGF0aCgxLDMpKQogICAgLy9jb3V0PDwicGF0aCBleGNpc3QiPDxlbmRsOwogICAgLy9lbHNlIGNvdXQ8PCJubyBwYXRoIjw8ZW5kbDsKCXJldHVybiAwOwp9