Pagini recente » Cod sursa (job #3262542) | Cod sursa (job #2524146) | Cod sursa (job #893061) | Cod sursa (job #1148571) | Cod sursa (job #59947)
Cod sursa(job #59947)
#include <fstream>
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
#define MAX 151
//ifstream fin ("castel.in");
//ofstream fout ("castel.out");
FILE* fin = fopen("castel.in", "r");
FILE* fout = fopen("castel.out", "w");
int di[] = {-1, 0, 0, 1};
int dj[] = {0, -1, 1, 0};
int n, m, k, a[MAX][MAX];
vector<vector<bool> > c1;
int s[MAX*MAX];
int OK(int i, int j);
int main()
{
//fin >> n >> m >> k;
fscanf(fin,"%d%d%d", &n, &m, &k);
c1.resize(n+1);
for ( int i = 1; i <= n; i++ )
{
c1[i].resize(m+1);
for ( int j = 1; j <= m; j++ )
{
//fin >> a[i][j];
fscanf(fin,"%d", &a[i][j]);
}
}
s[k] = 1;
int c;
int l;
if ( k % m == 0 )
{
c = m;
l = k / m;
}
else
{
c = k % m;
l = k / m + 1;
}
s[a[l][c]] = 1;
c1[l][c] = 1;
deque<pair<int,int> > q;
q.push_back(make_pair(l,c));
bool ok = true;
while ( ok )
{
ok = false;
for ( int x = 0; x < q.size(); x++ )
{
int i = q[x].first;
int j = q[x].second;
for ( int d = 0; d < 4; d++ )
{
int iv = i + di[d];
int jv = j + dj[d];
if ( OK(iv,jv) && !c1[iv][jv] )
{
c1[iv][jv] = 1;
ok = true;
s[a[iv][jv]] = 1;
q.push_back(make_pair(iv,jv));
}
}
}
}
//fin.close();
/*for ( int i = 0; i < q.size(); i++ )
{
fout << q[i].first << " " << q[i].second << "\n";
} */
//fout << q.size() << "\n";
fprintf(fout,"%d", q.size());
//system("pause");
fclose(fin);
fclose(fout);
//fout.close();
return 0;
}
int OK(int i, int j)
{
if ( i < 1 || i > n || j < 1 || j > m ) return 0;
int nr = m*(i-1);
nr += j;
if ( s[nr] == 0 && s[a[i][j]] == 0 ) return 0;
s[nr] = 1;
return 1;
}