#include #include #include using

Transkrypt

#include #include #include using
#include<iostream>
#include<string>
#include<queue>
using namespace std;
int n,m;//n-x, m-y
int xo,yo,xw,yw;
int lab[1007][1007];
string s;
struct punkt{int x,y;};
queue<punkt> q;
int bfs(){
punkt p,pom;
p.x=xo; p.y=yo;
q.push(p);
while (!q.empty()){
p=q.front(); q.pop();
if (!lab[p.x-1][p.y]){
lab[p.x-1][p.y]=lab[p.x][p.y]+1;
pom.x=p.x-1; pom.y=p.y;
q.push(pom);
}
if (!lab[p.x+1][p.y]){
lab[p.x+1][p.y]=lab[p.x][p.y]+1;
pom.x=p.x+1; pom.y=p.y;
q.push(pom);
}
if (!lab[p.x][p.y-1]){
lab[p.x][p.y-1]=lab[p.x][p.y]+1;
pom.x=p.x; pom.y=p.y-1;
q.push(pom);
}
if (!lab[p.x][p.y+1]){
lab[p.x][p.y+1]=lab[p.x][p.y]+1;
pom.x=p.x; pom.y=p.y+1;
q.push(pom);
}
}
if (lab[xw][yw]) {
cout << lab[xw][yw] << "\n";
return 1;
}
return 0;
}
int main()
{
cin >>n>>m;
for(int i=0;i<=n+1;i++)
lab[i][0]=lab[i][m+1]=1;
for(int i=0;i<=m+1;i++)
lab[0][i]=lab[n+1][i]=1;
for(int j=1;j<=m;j++){
cin >> s;
for (int i=0;i<s.length();i++){
if (s[i]=='-'||s[i]=='w')
lab[i+1][j]=0;
else lab[i+1][j]=1;
if (s[i]=='o'){xo=i+1;yo=j;}
if (s[i]=='w'){xw=i+1;yw=j;}
}
cout<<"\n";
}
if (!bfs()) cout << "NIE\n";
/*
for(int j=0;j<=m+1;j++){
for (int i=0;i<=n+1;i++)
cout << lab[i][j] << " ";
cout<<"\n";
}
*/
return 0;
}