这道题初始就有一步了,需要注意
2026-08-29 12:27:48
发布于:广东
21阅读
0回复
0点赞
在题目最下面有说初始是一步,我开始没发现😂😂😂
就是普通的广度优先搜索
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int y;
};
char mp[1005][1005];
int a[1005][1005];
int n,m;
int dx[10] = {-1,1,0,0};
int dy[10] = {0,0,-1,1};
queue<node> q;
int main(){
int T;
cin>>T;
while(T--){
cin>>n>>m;
int sx,sy,tx,ty;
while(!q.empty()) q.pop();
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
a[i][j] = -1;
cin >> mp[i][j];
if(mp[i][j] == 'S'){
sx = i;sy = j;
}else if(mp[i][j] == 'T'){
tx = i;ty = j;
}
}
}
a[sx][sy] = 1;
// 初始是一步
// 这个地方表示走到mp[x][y]上所需要的最短步数
q.push({sx,sy});
while(!q.empty()){
node f = q.front();
q.pop();
if(f.x == tx && f.y == ty) break;
for(int i = 0;i <= 3;i++){
int xx = f.x + dx[i];
int yy = f.y + dy[i];
if(xx >= 1 && xx <= n && yy >= 1 && yy <= m){
if(mp[xx][yy] != 'X' && a[xx][yy] == -1){
a[xx][yy] = a[f.x][f.y] + 1;
q.push({xx,yy});
}
}
}
}
cout << a[tx][ty] << endl;
}
return 0;
}
全部评论 2
.
2026-08-29 来自 广东
0有人吗
2026-08-27 来自 广东
0



有帮助,赞一个