Pagini recente » Cod sursa (job #2133112) | Cod sursa (job #961966) | Cod sursa (job #22338) | Cod sursa (job #139019) | Cod sursa (job #2552816)
#include <fstream>
#define dim 1010
using namespace std;
int a[dim][dim];
int f[dim][dim];
int dr[dim][dim];
int d[dim][dim];
pair <int,int> c[dim];
pair <int,int> D[dim];
int i,j,k,n,m;
char ch;
int di[]={-1,0,1, 0};
int dj[]={ 0,1,0,-1};
void stergere(int a[dim][dim]) {
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) a[i][j]=0;
}
int isOK(int i,int j) {
if (i<1||i>n||j<1||j>m) return 0;
return 1;
}
void LeeDragon(int i,int j) {
f[i][j]=1;
dr[i][j]=1;
int u=0,p=1;
c[++u]=make_pair(i,j);
while (p<=u) {
int ic=c[p].first;
int jc=c[p].second;
for (int dir=0;dir<4;dir++) {
int iu=ic+di[dir];
int ju=jc+dj[dir];
if (isOK(iu,ju)&&f[iu][ju]==0&&a[iu][ju]!=2) {
f[iu][ju]=1;
c[++u]=make_pair(iu,ju);
dr[iu][ju]=dr[ic][jc]+1;
d[iu][ju]=min(d[iu][ju],dr[iu][ju]);
}
}
p++;
}
}
int main() {
ifstream fin("barbar.in");
ofstream fout("barbar.out");
fin>>n>>m;
///Dragon=3
///Perete=2
///Barbar=1
///Final=4
for (i=1;i<=n;i++) {
for (j=1;j<=m;j++) {
fin>>ch;
if (ch=='D') {
a[i][j]=3;
D[++k]=make_pair(i,j);
}
if (ch=='*') a[i][j]=2;
if (ch=='I') a[i][j]=1;
if (ch=='O') a[i][j]=4;
}
}
for (i=1;i<=k;i++) {
LeeDragon(D[i].first,D[i].second);
stergere(f);
stergere(dr);
}
for (i=1;i<=n;i++) {
for (j=1;j<=n;j++) {
fout<<d[i][j]<<" ";
}
fout<<"\n";
}
return 0;
}