Pagini recente » Cod sursa (job #1004784) | Cod sursa (job #2036068) | Cod sursa (job #1245167) | Cod sursa (job #1871940) | Cod sursa (job #1900209)
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;
ifstream f ("kdrum.in");
ofstream g ("kdrum.out");
int Map1[60][60], Map2[60][60];
int n, m, k, x1, x2, y1, y2;
int di[4];
int dj[4];
queue < pair < int, int > >Queue;
void Read()
{
f >> n >> m >> k;
f >> x1 >> x2 >> y1 >> y2;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
f >> Map1[i][j];
}
void Directions()
{
di[0] = 0; dj[0] = 1; //up
di[1] = 0; dj[1] = -1; //down
di[2] = 1; dj[2] = 0; //right
di[3] = -1; dj[3] = 0; //left
}
void Lee1()
{
int i, j, i_next, j_next;
Queue.push(make_pair(x1,x2));
while (!Queue.empty())
{
i = Queue.front().first;
j = Queue.front().second;
Queue.pop();
for (int direction = 0; direction < 4; direction ++)
{
i_next = i + di[direction];
j_next = j + dj[direction];
if (Map1[i_next][j_next] != 0)
{
Map1[i_next][j_next] = Map1[i][j] * Map1[i_next][j_next];
Queue.push(make_pair(i_next, j_next));
}
}
}
}
void Lee2()
{
int i, j, i_next, j_next;
Map2[x1][x2] = 1;
Queue.push(make_pair(x1,x2));
while ( !Queue.empty() )
{
i = Queue.front().first;
j = Queue.front().second;
Queue.pop();
for (int direction = 0; direction < 4; direction ++)
{
i_next = i + di[direction];
j_next = j + dj[direction];
if ( Map1[i_next][j_next] != 0 && Map2[i_next][j_next]<1 )
{
Map2[i_next][j_next] = Map2[i][j] + 1;
Queue.push(make_pair(i_next, j_next));
}
}
}
}
/*void Check()
{
if (Map1[y1][y2]%k == 0)
g << Map2[y1][y2];
}*/
int main()
{
Read();
Directions();
//Lee1();
Lee2();
//Check();
g << Map2[y1][y2];
return 0;
}