Pagini recente » Cod sursa (job #2183017) | Cod sursa (job #1529637) | Cod sursa (job #1397176) | Cod sursa (job #2063609) | Cod sursa (job #3168825)
#include <fstream>
#include <queue>
#include <utility>
#include <iostream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,ri,rj,ji,jj,lungime;
char ma[101][101];
string s;
queue<pair<int,int>> Q;
int dx[] = {-1,0,1,0,-1,-1,1,1},dy[] = {0,1,0,-1,-1,1,1,-1};
bool verif(int i,int j) {
if (i < 1 || i > n || j < 1 || j > m) return 0;
if (ma[i][j] != ' ') return 0;
return 1;
}
void Lee(int istart,int jstart) {
ma[istart][jstart] = '0';
Q.push({istart,jstart});
while(!Q.empty()) {
int ci = Q.front().first,cj = Q.front().second;
for (int k = 0;k<8;++k) {
int cci = ci + dx[k],ccj = cj + dy[k];
if (verif(cci,ccj)) {
ma[cci][ccj] = char(ma[ci][cj] + 1);
Q.push({cci,ccj});
}
}
Q.pop();
}
}
void Traseu(int i,int j,int lg) {
if (lg == (lungime + 1)/ 2) {
fout<<lg<<" "<<i<<" "<<j;
} else {
int p = -1;
for (int k = 0;k<7 && p == -1;++k) {
if (i + dx[k] >=1 && i + dx[k] <= n && j + dy[k] >=1 && j + dy[k] <= m)
if (ma[i][j] == ma[i + dx[k]][j + dy[k]] + 1)
p = k;
}
Traseu(i + dx[p],j + dy[p],lg + 1);
}
}
int main() {
fin>>n>>m;
getline(fin,s);
for (int i = 1;i<=n;++i) {
getline(fin,s);
while (s.size() < m) s+=" ";
for (int j = 1;j<=m;++j) {
ma[i][j] = s[j-1];
if (ma[i][j] == 'R') {
ri = i,rj = j;
ma[i][j] = ' ';
}
if (ma[i][j] == 'J') {
ji = i,jj = j;
ma[i][j] = ' ';
}
}
}
Lee(ri,rj);
lungime = ma[ji][jj] - 48;
Traseu(ji,jj,0);
// for (int i = 1;i<=n;++i) {
// for (int j = 1;j<=m;++j) {
// cout<<ma[i][j];
// }
// cout<<endl;
// }
return 0;
}