#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int bfs(int n, int a, int b){ vector> d(n,vector(n,-1)); vector> visited(n,vector(n, false)); struct POS{ int row; int col; }; vector cell; POS t; t.row=0; t.col=0; cell.push_back(t); d[0][0]=0; while(!cell.empty()){ POS temp=cell.front(); POS t2; visited[temp.row][temp.col]=true; if((temp.row-a>=0) && (temp.col-b>=0) &&!visited[temp.row-a][temp.col-b]){ t2.row=temp.row-a; t2.col=temp.col-b; visited[temp.row-a][temp.col-b]=true; d[temp.row-a][temp.col-b]=1+d[temp.row][temp.col]; cell.push_back(t2); } if((temp.row-b>=0) && (temp.col-a>=0) &&!visited[temp.row-b][temp.col-a]){ t2.row=temp.row-b; t2.col=temp.col-a; visited[temp.row-b][temp.col-a]=true; d[temp.row-b][temp.col-a]=1+d[temp.row][temp.col]; cell.push_back(t2); } if((temp.row-a>=0) &&(temp.col+b=0) &&(temp.col+a=0) &&!visited[temp.row+b][temp.col-a]){ t2.row=temp.row+b; t2.col=temp.col-a; visited[temp.row+b][temp.col-a]=true; d[temp.row+b][temp.col-a]=1+d[temp.row][temp.col]; cell.push_back(t2); } if((temp.row+a=0) &&!visited[temp.row+a][temp.col-b]){ t2.row=temp.row+a; t2.col=temp.col-b; visited[temp.row+a][temp.col-b]=true; d[temp.row+a][temp.col-b]=1+d[temp.row][temp.col]; cell.push_back(t2); } if((temp.row+b> n; for(int i=1; i