题解
2024-02-22 15:23:07
发布于:浙江
12阅读
0回复
0点赞
#include<iostream>
#include<cmath>
#include<queue>
using namespace std;
int arr[205][205],dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}},nx,ny,m,n,sum=0,ans=100,sx,sy,fx,fy;
char s;
bool flag=0,vis[205][205];
struct node{
int x,y;
int step;
};
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>s;
if(s=='S'){sx=i;sy=j;}
else if(s=='T'){fx=i;fy=j;}
else if(s=='.') arr[i][j]=0;
else arr[i][j]=1;
}
}
queue<node> q;
q.push({sx,sy,0});
vis[sx][sy]=1;
while(!q.empty()){
node t=q.front();
q.pop();
if(t.x==fx&&t.y==fy){
flag=1;
ans=t.step;
break;
}
for(int i=0;i<=3;i++){
int nx=t.x+dir[i][0];
int ny=t.y+dir[i][1];
if(nx<1||nx>m||ny<1||ny>n||arr[nx][ny]==1||vis[nx][ny]==1){
continue;
}
q.push({nx,ny,t.step+1});
vis[nx][ny]=1;
}
}
if(flag==1) cout<<ans;
else cout<<-1;
return 0;
}
这里空空如也
有帮助,赞一个