Pagini recente » Cod sursa (job #1767306) | Cod sursa (job #147992) | Cod sursa (job #96036) | Cod sursa (job #1718361) | Cod sursa (job #1345718)
#include<fstream>
#include<queue>
using namespace std;
ifstream f("kdrum.in");
ofstream g("kdrum.out");
struct poz{
int x,y,div,l;
};
int xi[5]={0,0,0,1,-1};
int yi[5]={0,1,-1,0,0};
queue<poz>q;
bool b[51][51][6001];
int n,m,x1,y1,x2,y2,k,a[51][51];
int cmmdc(int a,int b)
{
int r;
while(r)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void citire()
{
int i,j;
f>>n>>m>>k;
f>>x1>>y1>>x2>>y2;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
}
void solve()
{
poz aux;
int lung =0,x_cur,y_cur,xi_cur,yi_cur,divizor,i,dc,lungime;
aux.x=x1;aux.y=y1;aux.div=cmmdc(a[x1][y1],k),aux.l=1;
q.push(aux);
while(!q.empty())
{
x_cur=q.front().x;
y_cur=q.front().y;
divizor=q.front().div;
lungime=q.front().l;
q.pop();
for(i=1;i<=4;i++)
{
xi_cur=x_cur+xi[i];
yi_cur=y_cur+yi[i];
if(a[xi_cur][yi_cur]!=0)
{
dc=cmmdc(divizor*a[x_cur][y_cur],k);
if(b[xi_cur][yi_cur][dc]!=1)
{
b[xi_cur][yi_cur][dc]=1;
if(xi_cur==x2&&yi_cur==y2)
{
if(dc%k==0)
g<<lungime+1;
while(!q.empty()) q.pop();
break;
}
else{
aux.x=xi_cur;
aux.y=yi_cur;
aux.div=dc;
aux.l=lungime+1;
q.push(aux);
}
}
}
}
}
}
int main()
{
citire();
solve();
return 0;
}