Pagini recente » Cod sursa (job #95100) | Cod sursa (job #1744988) | Cod sursa (job #2416755) | Cod sursa (job #1834027) | Cod sursa (job #2369489)
#include <bits/stdc++.h>
using namespace std;
struct punct {
int x, y, d, c;
};
int cmmdc(int a, int b){
if(b == 0)
return a;
return cmmdc(b, a%b);
}
int a[52][52]={0};
queue<punct> q;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int main(){
int n, m, k, i, j, xi, yi, xf, yf;
ifstream f("kdrum.in");
ofstream g("kdrum.out");
f >> n >> m >> k >> xi >> yi >> xf >> yf;
bool viz[n+2][m+2][k+2];
for(i=0; i<=n+1; i++)
for(j=0; j<=m+1; j++)
for(int t=0; t<=k+1; t++)
viz[i][j][t] = false;
//cout << n;// << " " << m << " " << k << " " << yf;
//printf("%d\n", n);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
f >> a[i][j];
punct p;
p.x = xi;
p.y = yi;
p.c = 1;
p.d = k/cmmdc(a[xi][yi], k);
viz[p.x][p.y][p.d] = true;
q.push(p);
while(!q.empty()){
p = q.front();
q.pop();
if (p.x == xf && p.y == yf && p.d == 1){
g << p.c << "\n";
return 0;
}
punct c;
for(i=0; i<4; i++){
c.x = p.x+dx[i];
c.y = p.y+dy[i];
if(a[c.x][c.y] != 0){
c.c = p.c + 1;
c.d = p.d / cmmdc (p.d, a[c.x][c.y]);
if(!viz[c.x][c.y][c.d]){
viz[c.x][c.y][c.d] = true;
q.push(c);
}
}
}
}
}