代码:
#include<bits/stdc++.h>
using namespace std;
long long h,w,vis[2005][2005],vis2[2005][2005],fx,fy;
char a[2005][2005];
queue<pair<long long,long long> >q;
long long dx[4]={1,-1,0,0};
long long dy[4]={0,0,1,-1};
void bfs()
{
while(!q.empty())
{
long long xx=q.front().first,yy=q.front().second;
// cout<<xx<<' '<<yy<<endl;
q.pop();
for(int i=0;i<4;i++)
{
long long nx=xx+dx[i],ny=yy+dy[i];
if(nx>=1&&nx<=h&&ny>=1&&ny<=w&&vis[nx][ny]==0)
{
q.push(make_pair(nx,ny));
// cout<<q.front().first<<' '<<q.front().second;
vis2[nx][ny]=vis2[xx][yy]+1;
vis[nx][ny]=1;
// cout<<vis2[nx][ny]<<' '<<fx<<' '<<fy;
}
}
}
return;
}
void pd(long long q,long long x,long long y)
{
vis[x][y]=1;
while(1)
{
if(q==1) y--;
if(q==2) y++;
if(q==3) x++;
if(q==4) x--;
if(x<1||x>h||y<1||y>w) break;
if(a[x][y]=='#'||a[x][y]=='<'||a[x][y]=='>'||a[x][y]=='^'||a[x][y]=='v') break;
vis[x][y]=1;
// cout<<x<<' '<<y<<endl;
}
// cout<<"#######"<<endl;
return;
}
int main(){
cin>>h>>w;
for(int i=1;i<=h;i++)
{
for(int j=1;j<=w;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=h;i++)
{
for(int j=1;j<=w;j++)
{
// cout<<1;
if(a[i][j]=='G') fx=i,fy=j;
if(a[i][j]=='S') q.push(make_pair(i,j)),vis[i][j]=1;
if(a[i][j]=='#') vis[i][j]=1;
if(a[i][j]=='<') pd(1,i,j);
if(a[i][j]=='>') pd(2,i,j);
if(a[i][j]=='^') pd(3,i,j);
if(a[i][j]=='v') pd(4,i,j);
}
}
// for(int i=1;i<=h;i++)
// {
// for(int j=1;j<=w;j++)
// {
// cout<<vis[i][j]<<' ';
// }
// cout<<endl;
// }
bfs();
if(vis2[fx][fy]==0) cout<<-1;
else cout<<vis2[fx][fy];
return 0;
}
改者必关!!!