Pagini recente » Cod sursa (job #1544530) | Cod sursa (job #2326939) | Cod sursa (job #280091) | Cod sursa (job #2006741) | Cod sursa (job #2110180)
#include <fstream>
using namespace std;
ifstream in("kdrum.in");
ofstream out("kdrum.out");
int cmmdc(int a,int b)
{
int r;
r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
if(a!=0)
return b;
else
return 0;
}
int n,m,k,x1,y1,x2,y2,scazut;
int matrice[51][51],divpl[110];
int divizoriNr[251][110];
bool Mers[51][51];
int minimPasi=100000000;
int BKTStraight(int i,int j,int nrPasi)
{
if(i==x2&&j==y2)
{
if(minimPasi>nrPasi)
minimPasi=nrPasi;
}
if(Mers[i][j+1]==0&&matrice[i][j+1]!=0)
{
Mers[i][j+1]=1;
scazut=scazut*(cmmdc (Mers[i][j+1],k/scazut));
BKTStraight(i,j+1,nrPasi+1);
Mers[i][j+1]=0;
}
if(Mers[i+1][j]==0&&matrice[i+1][j]!=0)
{
Mers[i+1][j]=1;
scazut=scazut*(cmmdc (Mers[i+1][j],k/scazut));
BKTStraight(i+1,j,nrPasi+1);
Mers[i+1][j]=0;
}
if(Mers[i][j-1]==0&&matrice[i][j-1]!=0)
{
Mers[i][j-1]=1;
scazut=scazut*(cmmdc (Mers[i][j-1],k/scazut));
BKTStraight(i,j-1,nrPasi+1);
Mers[i][j-1]=0;
}
if(Mers[i-1][j]==0&&matrice[i-1][j]!=0)
{
Mers[i-1][j]=1;
scazut=scazut*(cmmdc (Mers[i-1][j],k/scazut));
BKTStraight(i-1,j,nrPasi+1);
Mers[i-1][j]=0;
}
}
int nushBKT(int i,int j,int nrPasi)
{
if(i==x2&&j==y2){
if(minimPasi>nrPasi)
minimPasi=nrPasi;
}
else
{
if(Mers[i][j+1]==0&&matrice[i][j+1]!=0)
{
Mers[i][j+1]=1;
scazut=scazut*(cmmdc (matrice[i][j+1],k/scazut));
nushBKT(i,j+1,nrPasi+1);
Mers[i][j+1]=0;
}
if(Mers[i][j+1]==0&&matrice[i][j+1]!=0)
{
Mers[i+1][j]=1;
scazut=scazut*(cmmdc (matrice[i+1][j],k/scazut));
nushBKT(i+1,j,nrPasi+1);
Mers[i+1][j]=0;
}
if(Mers[i][j+1]==0&&matrice[i][j+1]!=0)
{
Mers[i][j-1]=1;
scazut=scazut*(cmmdc (matrice[i][j-1],k/scazut));
nushBKT(i,j-1,nrPasi+1);
Mers[i][j-1]=0;
}
if(Mers[i][j+1]==0&&matrice[i][j+1]!=0)
{
Mers[i-1][j]=1;
scazut=scazut*(cmmdc (matrice[i-1][j],k/scazut));
nushBKT(i-1,j,nrPasi+1);
Mers[i-1][j]=0;
}
}
}
int main()
{
in>>n>>m>>k;
in>>x1>>y1>>x2>>y2;
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
in>>matrice[i][j];
matrice[i][j]=cmmdc(matrice[i][j],k);
}
scazut=matrice[x1][y1];
Mers[x1][y1]=1;
nushBKT(x1,y1,1);
out<<minimPasi;
return 0;
}