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