Pagini recente » Cod sursa (job #1561495) | Cod sursa (job #1793477) | Cod sursa (job #3281271) | Cod sursa (job #423837) | Cod sursa (job #3201858)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("miting.in");
ofstream fout("miting.out");
int n, m, C, a[100][100], nrl, sol, r;
char cuv[12],s;
int sus, jos, st, dr;
struct Pozitii {
int x, y;
}v[12];
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,-1,1 };
queue<pair<int, int>>q;
bool viz[100][100];
int mat[100][100];
int Innit(int x, int y)
{
return (x >= 1 && x <= n && y >= 1 && y <= m);
}
void Clean()
{
int i, j;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)viz[i][j] = mat[i][j] = 0;
}
int Lee(int i, int j)
{
int x, y, k;
Clean();
q.push(make_pair(i, j));
mat[i][j] = 1;
viz[i][j] = 1;
while (!q.empty())
{
i = q.front().first;
j = q.front().second;
for (k = 0; k < 4; k++)
{
x = dx[k] + i;
y = dy[k] + j;
if (Innit(x, y) && (viz[x][y] == 0 || mat[x][y] > mat[i][j] + 1) && a[x][y]!=-1)
{
viz[x][y] = 1;
mat[x][y] = mat[i][j] + 1;
q.push(make_pair(x, y));;
}
}
q.pop();
}
return 0;
}
void Afis()
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
fout << mat[i][j] << " ";
fout << "\n";
}
fout << "\n";
}
int main()
{
int i, j, k;
fin >> C >> n >> m;
fin >> cuv;
jos = st = 100;
sus = dr = 0;
for(i=1;i<=n;i++)
for (j = 1; j <= m; j++)
{
fin >> s;
if (s == '_')a[i][j] = 0;
else if (s == '#')a[i][j] = -1;
else if (s >= 'A' && s <= 'Z')
{
Lee(i, j);
a[i][j] = 1;
nrl++;
v[nrl].x = i;
v[nrl].y = j;
if (i < jos)jos = i;
if (i > sus)sus = i;
if (j > dr)dr = j;
if (j < st)st = j;
}
}
if (C == 1)
{
fout << (sus - jos + 1) * (dr - st + 1)<<"\n";
return 0;
}
r = 1e9;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (a[i][j] != -1)
{
Lee(i, j);
sol = 0;
for (k = 1; k <= nrl; k++)
{
if (mat[v[k].x][v[k].y] != 0)
sol += mat[v[k].x][v[k].y];
else
{
sol = 0;
break;
}
}
if (sol-nrl < r && sol!=0)r = sol - nrl;
}
fout << r;
return 0;
}