Pagini recente » Cod sursa (job #1423948) | Cod sursa (job #2199871) | Cod sursa (job #436444) | Cod sursa (job #620340) | Cod sursa (job #2962940)
/*
"TLE is like the wind, always by my side"
- Yasuo - 2022 -
*/
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
using namespace std;
struct coord
{
int lin;
int col;
int dist;
};
int dlin[5] = {0, 0, 1, -1};
int dcol[5] = {1, -1, 0, 0};
char a[1001][1001];
bool visited[1001][1001];
int distans[1001][1001];
queue<coord> q;
int startl,startc,finl,finc;
bool posibil (int distmin)
{
int i;
int l,c;
coord frontnode;
q.push({startl,startc,0});
while (!q.empty())
{
frontnode=q.front();
if (!visited[frontnode.lin][frontnode.col])
{
visited[frontnode.lin][frontnode.col]=1;
for (i=0; i<4; i++)
{
l=frontnode.lin;
c=frontnode.col;
l+=dlin[i];
c+=dcol[i];
if (!visited[l][c] && a[l][c]!='*' && distans[l][c]>=distmin)
q.push({l,c,0});
}
}
q.pop();
}
if (visited[finl][finc])
return 1;
else
return 0;
}
int main()
{
ifstream fin("barbar.in");
ofstream fout("barbar.out");
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,m,i,j,l,c,r,pas;
coord frontnode;
fin >> n >> m;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
fin >> a[i][j];
if (a[i][j]=='I')
{
startl=i;
startc=j;
}
if (a[i][j]=='O')
{
finl=i;
finc=j;
}
if (a[i][j]=='D')
q.push({i,j,0});
}
}
for (i=0; i<=n+1; i++)
{
a[i][0]='*';
a[i][m+1]='*';
}
for (i=0; i<=m+1; i++)
{
a[0][i]='*';
a[n+1][i]='*';
}
while (!q.empty())
{
frontnode=q.front();
if (!visited[frontnode.lin][frontnode.col])
{
visited[frontnode.lin][frontnode.col]=1;
distans[frontnode.lin][frontnode.col]=frontnode.dist;
for (i=0; i<4; i++)
{
l=frontnode.lin;
c=frontnode.col;
l+=dlin[i];
c+=dcol[i];
if (!visited[l][c] && a[l][c]!='*')
q.push({l,c,frontnode.dist+1});
}
}
q.pop();
}
r=0;
pas=(1<<10);
while (pas)
{
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
visited[i][j]=0;
}
if (posibil(r+pas))
r+=pas;
pas=pas/2;
}
fout << r;
}