Pagini recente » Cod sursa (job #2508006) | Cod sursa (job #3126046) | Cod sursa (job #1816971) | Cod sursa (job #1346085) | Cod sursa (job #1009615)
#include <iostream>
#include <fstream>
#include <queue>
#include <string>
using namespace std;
ifstream f ("rj.in");
ofstream g ("rj.out");
int m, n, i, k, c, fx, fy;
char ch;
int vx [] = {1, 1, 0, -1, -1, -1, 0, 1};
int vy [] = {0, 1, 1, 1, 0, -1, -1, -1};
queue <int> x;
queue <int> y;
queue <int> w;
queue <int> pas;
int main()
{
pas.push(1);
pas.push(1);
f >> m >> n;
int rj[2][n+1][m+1];
string s;
getline(f, s);
for (i = 1; i <= n; i++)
{
getline(f, s);
if(s.length() < m + 1)
{
for (k=s.length(); k <= m; k++)
rj[1][i][k] = rj[2][i][k] = 0;
}
for (k = 1; k <= m; k++)
{
ch = s[k-1];
switch (ch)
{
case ' ':
rj[1][i][k] = rj[2][i][k] = 0;
break;
case 'X':
rj[1][i][k] = rj[2][i][k] = -5;
break;
case 'R':
x.push(i);
y.push(k);
w.push(1);
rj[1][i][k] = rj[2][i][k] = 0;
break;
case 'J':
x.push(i);
y.push(k);
w.push(2);
rj[1][i][k] = rj[2][i][k] = 0;
break;
}
}
}
for(i=1; i <=n; i++)
{
for(k=1; k<=m; k++)
cout << rj[1][i][k] << " ";
cout << "\n\n\n";
}
c = 1;
while(c)
{
for (i = 0; i < 8; i++)
{
if((rj[w.front()][x.front()+vx[i]][y.front()+vy[i]]==0)&&(x.front()+vx[i]>0)&&(y.front()+vy[i]>0)&&(x.front()+vx[i] < m)&&(y.front()+vy[i] < n))
{
rj [w.front()] [x.front() + vx[i]] [y.front() + vy[i]] = rj [w.front()] [x.front()] [y.front()] + 1;
x.push(x.front()+vx[i]);
y.push(y.front()+vy[i]);
w.push(w.front());
pas.push(pas.front()+1);
if((rj[1][x.front()+vx[i]][y.front()+vy[i]] == rj[2][x.front()+vx[i]][y.front()+vy[i]]) && (rj[1][x.front()+vx[i]][y.front()+vy[i]] != -5))
{
fx = x.front()+vx[i];
fy = y.front()+vy[i];
c = 0;
g << pas.front() + 1 << " ";
break;
}
}
else if((rj[w.front()][x.front()][y.front()]+1 < rj[w.front()][x.front()+vx[i]][y.front()+vy[i]])&&(x.front()+vx[i]>0)&&(y.front()+vy[i]>0)&&(x.front()+vx[i] < m)&&(y.front()+vy[i] < n))
{
rj[w.front()][x.front()+vx[i]][y.front()+vy[i]] = rj[w.front()][x.front()][y.front()] + 1;
x.push(x.front()+vx[i]);
y.push(y.front()+vy[i]);
w.push(w.front());
pas.push(pas.front()+1);
if((rj[1][x.front()+vx[i]][y.front()+vy[i]] == rj[2][x.front()+vx[i]][y.front()+vy[i]]) && (rj[1][x.front()+vx[i]][y.front()+vy[i]] != -5))
{
fx = x.front()+vx[i];
fy = y.front()+vy[i];
c = 0;
g << pas.front() + 1 << " ";
break;
}
}
}
x.pop();
y.pop();
w.pop();
pas.pop();
}
g << fx << " " << fy << " ";
return 0;
}