Pagini recente » Cod sursa (job #942580) | Cod sursa (job #593190) | Cod sursa (job #261301) | Cod sursa (job #2820049) | Cod sursa (job #217467)
Cod sursa(job #217467)
#include <stdio.h>
#include <queue>
#include <bitset>
#define inf 32000
using namespace std;
long n,m,i,j,k,x1,x2,y1,y2,x,y,xx,yy;
long dx[]={-1,0,1,0},dy[]={0,1,0,-1};
short int d[1001][1024],v[1001][1024];
char a[1001][1024];
bitset <1024>mk[1001];
queue <short int> Qx,Qy;
int main(){
freopen("barbar.in","r",stdin);freopen("barbar.out","w",stdout);
scanf("%ld %ld\n",&n,&m);
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
d[i][j]=inf;
for (i=1;i<=n;++i){
scanf("%s\n",a[i]+1);
for (j=1;j<=m;++j)
if (*(a[i]+j)=='D'){Qx.push(i);Qy.push(j);d[i][j]=0;mk[i][j]=1;}
else if (*(a[i]+j)=='I'){x1=i;y1=j;}
else if (*(a[i]+j)=='O'){x2=i;y2=j;}
}
while (!Qx.empty()){
x=Qx.front();Qx.pop();y=Qy.front();Qy.pop();
mk[x][y]=0;
for (k=0;k<4;++k){
xx=x+dx[k];yy=y+dy[k];
if (xx && xx<=n && yy && yy<=m)
if (d[xx][yy]>d[x][y]+1){
d[xx][yy]=d[x][y]+1;
if (!mk[xx][yy]){mk[xx][yy]=1;Qx.push(xx);Qy.push(yy);}
}
}
}
/*for (i=1;i<=n;++i){
for (j=1;j<=m;++j)
printf("%ld ",d[i][j]);
printf("\n");
}*/
/*Qx.push(x1);Qy.push(y1);
while (!Qx.empty()){
x=Qx.front();Qx.pop();y=Qy.front();Qy.pop();
*/
return 0;
}