Pagini recente » Cod sursa (job #3292299) | Cod sursa (job #884947) | Cod sursa (job #2899788) | Cod sursa (job #1157421) | Cod sursa (job #3255272)
#include <bits/stdc++.h>
using namespace std;
char mat[1005][1005];
int flacari[1005][1005];
queue<pair<int, int>> q;
int dirx[] = {0, 0, -1, 1};
int diry[] = {1, -1, 0, 0};
void check(int nivel)
{
//dfs(nivel);
// etc etc
}
int main()
{
/// TO FINISH TMRW
int n, m;
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
flacari[i][j] = 21e8;
for(int i=0; i<=n+1; i++)
flacari[i][0] = -1, flacari[i][m+1] = -1;
for(int j=0; j<=m+1; j++)
flacari[0][j] = -1, flacari[n+1][j] = -1;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
cin>>mat[i][j];
if(mat[i][j] == 'D')
q.push({i, j}), flacari[i][j] = 0;
}
while(q.empty() == false)
{
int i = q.front().first, j = q.front().second;
q.pop();
for(int kk=0; kk<4; kk++)
if( flacari[ i+dirx[kk] ][ j+diry[kk] ] > flacari[i][j] + 1 )
q.push({i+dirx[kk], j+diry[kk]}), flacari[ i+dirx[kk] ][ j+diry[kk] ] = flacari[i][j] + 1;
}
int maxx = 0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++){
cout<<flacari[i][j]<<" ";
maxx = max(maxx, flacari[i][j]);
}
cout<<'\n';
}
int st = 0, dr = maxx + 1;
while(st < dr)
{
int mij = (st + dr) / 2;
if(check(mij) == true)
st = mij + 1;
else
dr = mij - 1;
}
cout<<(st + dr) / 2;
return 0;
}