请问这段代码该怎么修改?

小明置身于一个迷宫,请你帮小明找出从起点到终点的最短路程。
小明只能向上下左右四个方向移动。
输入
输入包含多组测试数据。输入的第一行是一个整数T,表示有T组测试数据。
每组输入的第一行是两个整数N和M(1<=N,M<=100)。
接下来N行,每行输入M个字符,每个字符表示迷宫中的一个小方格。
字符的含义如下:
‘S’:起点
‘E’:终点
‘-’:空地,可以通过
‘#’:障碍,无法通过
输入数据保证有且仅有一个起点和终点。
输出
对于每组输入,输出从起点到终点的最短路程,如果不存在从起点到终点的路,则输出-1。
样例输入 复制
1
5 5
S-###

##---
E#---
---##
样例输出 复制
9


 
```c++
#include<iostream>
#include<vector>
using namespace std;
const int MAX=10;
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
char mg[MAX][MAX]={};
int cnt=0,M,N,T;
class Box
{
    public:
        int i;
        int j;
        Box(int i1,int j1):i(i1),j(j1){}
};
void mgpath(int xi,int yi,int xe,int ye,vector<Box> path)
{
    Box b(xi,yi);
    path.push_back(b);
    mg[xi][yi]='#';
    if(xi==xe&&yi==ye)
    {
        cnt++;
        for(int k=0;k<path.size();k++)
        printf("(%d,%d)",path[k].i,path[k].j);
        cout<<endl;
        mg[xi][yi]='-';
    }
    else
    {
        int di=0;
        while(di<4)
        {
            int i=xi+dx[di];
            int j=yi+dy[di];
            if(i>=0&&i<M&&j>=0&&j<N&&mg[xi][yi]=='-')
            mgpath(i,j,xe,ye,path);
            di++;
        }
        mg[xi][yi]='-';
    }
}
int main()
{
    cin>>T;
    cin>>N>>M;
    int xi,yi,xe,ye;
    while(T--)
    {
        for(int i=0;i<N;i++)
        {
            for(int j=0;j<M;j++)
            {
                cin>>mg[i][j];
            }
        }
    }
    for(int i=0;i<N;i++)
        {
            for(int j=0;j<M;j++)
            {
                if(mg[i][j]=='S')
                {
                    xi=i;
                    yi=j;
                }
            }
        }
    for(int i=0;i<N;i++)
        {
            for(int j=0;j<M;j++)
            {
                if(mg[i][j]=='E')
                {
                    xe=i;
                    ye=j;
                }
            }
        }
        vector<Box>path;
        mgpath(xi,yi,xe,ye,path);
    
    return 0;
}
 

#include<iostream>
#include<vector>
#include<queue>
using namespace std;

const int MAX = 100;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
char mg[MAX][MAX] = {};
int M, N;

int bfs(int sx, int sy, int ex, int ey)
{
    queue<pair<int, int>> q;
    vector<vector<int>> dist(M, vector<int>(N, -1));

    q.push({sx, sy});
    dist[sx][sy] = 0;

    while (!q.empty())
    {
        int x = q.front().first;
        int y = q.front().second;
        q.pop();

        if (x == ex && y == ey)
            return dist[x][y];

        for (int i = 0; i < 4; i++)
        {
            int nx = x + dx[i];
            int ny = y + dy[i];

            if (nx >= 0 && nx < M && ny >= 0 && ny < N && mg[nx][ny] == '-' && dist[nx][ny] == -1)
            {
                q.push({nx, ny});
                dist[nx][ny] = dist[x][y] + 1;
            }
        }
    }

    return -1; // 若无法到达终点,则返回-1
}

int main()
{
    int T;
    cin >> T;

    while (T--)
    {
        cin >> N >> M;

        int sx, sy, ex, ey;

        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
            {
                cin >> mg[i][j];
                if (mg[i][j] == 'S')
                {
                    sx = i;
                    sy = j;
                }
                else if (mg[i][j] == 'E')
                {
                    ex = i;
                    ey = j;
                }
            }
        }

        int shortestDistance = bfs(sx, sy, ex, ey);
        cout << shortestDistance << endl;
    }

    return 0;
}

修改后的代码使用了广度优先搜索算法(BFS)来寻找从起点到终点的最短路径。在bfs函数中,我们使用一个队列和一个二维数组来记录每个位置的距离。通过遍历四个方向上的相邻位置,并将其入队,逐层扩展,直到找到终点或无法到达终点为止。

请注意,修改后的代码中没有使用vector来记录路径,而是使用了一个二维数组dist来记录每个位置的距离。最终的最短路径长度存储在dist[ex][ey]中。

参考我的博客文章