Cod sursa(job #557017)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 16 martie 2011 13:45:11
Problema Barbar Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb

#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;}