Pagini recente » Cod sursa (job #2696816) | Cod sursa (job #848753) | Cod sursa (job #3221071) | Cod sursa (job #2232871) | Cod sursa (job #1678029)
#include <iostream>
#include <fstream>
using namespace std;
#define NR_DIR 4
struct cell {
int l;
int c;
};
cell coada[23500];
int dl[4] = {0, -1, 0, 1};
int dc[4] = {-1, 0, 1, 0};
bool chei[23500], drum[152][152];
int castel[152][152];
int cntr, sol, n, m;
void lee () {
//cout << "test";
int i, j, lvec, cvec;
bool iesi = false;
for (i = 0; i < cntr; i++) {
for (j = 0; j < NR_DIR; j++) {
lvec = coada[i].l + dl[j];
cvec = coada[i].c + dc[j];
if (castel[lvec][cvec] != -1 && chei[castel[lvec][cvec]] && drum[lvec][cvec] == 0) {
drum[lvec][cvec] = 1;
coada[cntr].l = lvec;
coada[cntr++].c = cvec;
sol++;
chei[(lvec - 1) * m + cvec] = 1;
iesi = true;
}
}
}
if (iesi == true) {
lee();
}
}
int main() {
ifstream file_in ("castel.in");
ofstream file_out ("castel.out");
int pozS;
int i, j;
// Citirea datelor
file_in >> n >> m >> pozS;
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
file_in >> castel[i][j];
}
}
// Bordare
for (i = 0; i <= n + 1; i++) {
castel[i][0] = castel[i][m + 1] = -1;
}
for (i = 0; i <= m + 1; i++) {
castel[0][i] = castel[n + 1][i] = -1;
}
// Calcularea solutiei
coada[cntr].l = ((pozS - 1) / m) + 1;
coada[cntr].c = (pozS - 1) % m + 1;
chei[castel[coada[cntr].l][coada[cntr].c]] = 1;
cntr++;
lee ();
// Afisarea solutei
file_out << sol;
return 0;
}