Pagini recente » Cod sursa (job #323999) | Borderou de evaluare (job #1623963) | Cod sursa (job #2168810) | Borderou de evaluare (job #1065780) | Cod sursa (job #557017)
Cod sursa(job #557017)
#include <cstdio>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <queue>
using namespace std;
#define nn 1001
#define ii first
#define jj second
const int di[]={-1,1,0,0},
dj[]={0,0,-1,1};
queue<pair <int,int> > q;
int n,m;
char a[nn][nn],b[nn][nn],c[nn][nn];
pair<int ,int >x,y;
void lee_1 (){
while(!q.empty()){
pair<int,int> t=q.front();
for(int k=0;k<4;++k){
int i=t.ii+di[k],j=t.jj+dj[k];
if(i>0&&j>0&&i<=n&&j<=m&&(b[i][j]==0||b[i][j]>b[t.ii][t.jj]+1)){
b[i][j]=b[t.ii][t.jj]+1;
q.push(make_pair(i,j));
}
}
q.pop();
}
}
int main ()
{
ifstream in ("barbar.in");
in>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
char crt;
in>>crt;
if(crt=='.'){
a[i][j]=b[i][j]=c[i][j]=0;
}
if(crt=='*'){
a[i][j]=b[i][j]=c[i][j]=-1;
}
if(crt=='I'){
a[i][j]=1;
x.ii=i;
x.jj=j;
}
if(crt=='D'){
a[i][j]=-3;
c[i][j]=-3;
b[i][j]=1;
q.push(make_pair(i,j));
}
if(crt=='O'){
y.ii=i;
y.jj=j;
}
}
lee_1();
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)
cout<<setw(2)<<(int)b[i][j]<<" ";
cout<<endl;
}
return 0;}