|
- #include<iostream>
- #include<queue>
- #include<cmath>
- using namespace std;
- const int M=55;
- struct node
- {
- int t,r,c,time;
- }p;
- char ch;
- bool o[M][M],flag;
- queue<node>q;
- int n,m,gr,gc,vis[M][M],ans[5001],tot;
- int main()
- {
- cin>>n>>m;
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- {
- cin>>flag;
- if(flag)
- {
- o[i][j]=1;
- o[i-1][j-1]=1;
- o[i-1][j]=1;
- o[i][j-1]=1;
- }
- vis[i][j]=99999;
- }
- for(int i=1;i<=n;i++)
- {
- o[n][i]=1;
- o[i][m]=1;
- }
- flag=0;
- cin>>p.r>>p.c;
- p.time=0;
- cin>>gr>>gc;
- cin>>ch;
- if(ch=='N')
- p.t=1;
- if(ch=='E')
- p.t=2;
- if(ch=='S')
- p.t=3;
- if(ch=='W')
- p.t=4;
- q.push(p);
- while(!q.empty())
- {
- if(q.front().r==gr && q.front().c==gc)
- ans[++tot]=q.front().time;
- for(int i=1; i<=4; i++)
- {
- p.t=q.front().t;
- p.c=q.front().c;
- p.r=q.front().r;
- p.time=q.front().time+1;
- if(i!=p.t)
- {
- p.time++;
- if(abs(p.t-i)==2)p.time++;
- }
- p.t=i;
- for(int j=1;j<=3;j++)
- {
- if(i==1)p.r--;
- if(i==2)p.c++;
- if(i==3)p.r++;
- if(i==4)p.c--;
- if(o[p.r][p.c] || p.r<=0 || p.c<=0 || p.r>n || p.c>m)break;
- if(vis[p.r][p.c]>p.time)
- {
- q.push(p);
- vis[p.r][p.c]=p.time;
- }
- }
- }
- q.pop();
- }
- if(tot==0)cout<<"-1"<<endl;
- else
- {
- for(int i=1;i<=tot;i++)ans[1]=min(ans[1],ans[i]);
- cout<<ans[1]<<endl;
- }
- return 0;
- }
复制代码 |
|