Pagini recente » Cod sursa (job #3002573) | Cod sursa (job #310473) | Cod sursa (job #321086) | Cod sursa (job #2031988) | Cod sursa (job #2542923)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
int n, m, k, startx, starty, stopx, stopy, matrix[55][55], dp[55][55][2000], dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1};
queue <pair <int, pair <int, int> > > coada;
int main()
{
fin >> n >> m >> k;
fin >> startx >> starty >> stopx >> stopy;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
fin >> matrix[i][j];
coada.push({matrix[startx][starty] % k, {startx, starty}});
dp[startx][starty][matrix[startx][starty] % k] = 1;
while (!coada.empty())
{
int i = coada.front().second.first;
int j = coada.front().second.second;
int val = coada.front().first;
if (i == stopx && j == stopy && val == 0)
{
fout << dp[i][j][val];
return 0;
}
coada.pop();
for (int w = 0; w < 4; ++w)
{
int ii = i + dx[w];
int jj = j + dy[w];
if (ii >= 1 && jj >= 1 && ii <= n && jj <= m && matrix[ii][jj] != 0)
{
int new_val = (val * matrix[ii][jj]) % k;
if (dp[ii][jj][new_val] != 0) continue;
dp[ii][jj][new_val] = 1 + dp[i][j][val];
coada.push({new_val, {ii, jj}});
}
}
}
fin.close();
fout.close();
return 0;
}