Pagini recente » Cod sursa (job #1296924) | Cod sursa (job #2363085) | Cod sursa (job #2058398) | Cod sursa (job #1589563) | Cod sursa (job #932048)
Cod sursa(job #932048)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
void Afisare();
int n, m, k, li, ci, a[155][155], b[155][155], nrcam[155][155], nrc = 1;
bool fr[23000];
short l[1000000], c[1000000];
const int di[] = {1, -1, 0, 0},
dj[] = {0, 0, 1, -1};
void Citire(){
int camere = 0;
fin>>n>>m>>k;
for(int i=1; i<=n;i++)
for(int j=1; j<=m;j++){
fin>>a[i][j];
nrcam[i][j] = ++camere;
if(camere == k) li = i, ci = j;
}
}
void Bordare(){
for(int i=0; i<=n+1; i++)
a[i][0] = a[i][m+1] = -1;
for(int j=0; j<=m+1; j++)
a[0][j] = a[n+1][j] = -1;
}
void Lee(){
int st = 1, dr = 1;
l[1] = li, c[1] = ci;
b[li][ci] = 1;
fr[k] = 1;
while(st <= dr){
int i = l[st], j = c[st];
for(int k=0; k<4; k++){
int ii = i + di[k], jj = j + dj[k];
if(b[ii][jj] != -1 && nrc > b[ii][jj] && fr[a[ii][jj]]){
if(b[ii][jj] == 0) nrc++, fr[nrcam[ii][jj]] = 1;
dr++;
l[dr] = ii, c[dr] = jj,
b[ii][jj] = nrc;
}
}
st++;
}
}
int main()
{
Citire();
Bordare();
Lee();
fout<<nrc;
//Afisare();
return 0;
}
void Afisare(){
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++)
fout<<b[i][j]<<" ";
fout<<'\n';
}
fout<<endl;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++)
fout<<a[i][j]<<" ";
fout<<'\n';
}
}