Pagini recente » Cod sursa (job #1715937) | Cod sursa (job #2098879) | Cod sursa (job #2472899) | Cod sursa (job #2751451) | Cod sursa (job #1344130)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
struct Nod{int x,y,div,pas;};
queue<Nod> lista;
int n,m,k,xi,yi,xf,yf,a[51][51],dx[]={-1,0,1,0},dy[]={0,1,0,-1},pas=1,b[51][51][1000];
void citire()
{
fin>>n>>m>>k;
fin>>xi>>yi>>xf>>yf;
for(int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
fin>>a[i][j];
}
int cmmdc(int a, int b)
{
if(a>b)return cmmdc(a-b,b);
else if(a<b)return cmmdc(a,b-a);
else return a;
}
void add(int x,int y, int div, int pas)
{
Nod t;
t.x=x;
t.y=y;
t.pas=pas;
t.div=div;
lista.push(t);
b[x][y][div]=1;
}
void rezolvare()
{
add(xi ,yi ,cmmdc(a[xi][yi],k) ,1 );
while ( !lista.empty() )
{
Nod t=lista.front();
lista.pop();
for(int i=0; i<=3; i++)
{
int nx=t.x+dx[i];
int ny=t.y+dy[i];
if(a[nx][ny]!= 0){
int d= t.div * cmmdc( a[nx][ny] ,k );
if(b[nx][ny][d]!=1){
if(nx==xf and ny==yf and d==k) {fout<<t.pas+1<<endl; return;}
add(nx,ny,d,t.pas+1);
}
}
}
}
}
int main()
{
citire();
rezolvare();
return 0;
}