请问我这道题为什么会超时c++

求思路,不用帮改正;这个他标签明明写是深搜啊,这样为啥会超时?

img

img
两组数据都过了,求一些节省时间的办法;

#include<bits/stdc++.h>
using namespace std;
char c;
int xb,yb,xe,ye,a[11][11];
int f=0,anss=-1;
int xx[5]={0,-1,1,0,0},yy[5]={0,0,0,-1,1};
void dfs(int x,int y,int step)
{
    if(x==xe&&y==ye)
    {
        anss=max(step,anss);
        f=1;
    }
    for(int i=1;i<=4;i++)
    {
        int xxx=x+xx[i];
        int yyy=y+yy[i];
        if(a[xxx][yyy]) 
        {
            a[x][y]=0;
            dfs(xxx,yyy,step+1);
            a[x][y]=1;
        }
    }
    
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>c;
            if(c=='*') a[i][j]=0;
            else a[i][j]=1;
            if(c=='S') 
            {
                xb=i;
                yb=j;
            }
            if(c=='T')
            {
                xe=i;
                ye=j;
            }
        }
    }
    dfs(xb,yb,0);
    if(!f) cout<<"-1";
    else cout<<anss;
}

转载自 迷宫(二) 计蒜客--1596_二进制宇宙的博客-CSDN博客 题目链接题目如下:蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢?输入格式第一行输入两个整数 n和 m,表示这是一个 n×m 的迷宫。接下来的输入一个 n行 m列的迷宫。其中 ‘S’ 表示蒜头君的位置,’*‘表示墙,蒜头君无法通过,’.‘表示路,蒜头君可以通过’.'移动,'T’表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。输出格式输出整数,表示蒜头君逃出迷宫的最少步数,如果蒜头君无法逃出迷 https://blog.csdn.net/Huo6666/article/details/107190386/


#include<iostream>
using namespace std;
struct muban
{
     int x;
     int y;
     int step;
}stu[8000];
char imap[15][15];
int book[15][15];
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
     int n,m;
     cin>>n>>m;
     int stax,stay,endx,endy;
     for(int i=0;i<n;i++)
     {
          for(int j=0;j<m;j++)
          {
               cin>>imap[i][j];
               if(imap[i][j]=='S')
               {
                    stax=i;
                    stay=j;
               }
               if(imap[i][j]=='T')
               {
                    endx=i;
                    endy=j;
                    imap[i][j]='.';
               }
          }
     }
     int head,tail;
     int tx,ty;
     head=1;
     stu[head].x=stax;
     stu[head].y=stay;
     stu[head].step=0;
     book[stax][stay]=1;
     tail=2;
     int stepmin=200;
     while(head<tail)
     {
          for(int i=0;i<4;i++)
          {
               tx=stu[head].x+next[i][0];
               ty=stu[head].y+next[i][1];
               if(tx>=0&&tx<n&&ty>=0&&ty<m)
               {
                    if(book[tx][ty]==0&&imap[tx][ty]=='.')
                    {
                         stu[tail].x=tx;
                         stu[tail].y=ty;
                         stu[tail].step=stu[head].step+1;
                         book[tx][ty]=1;
                         tail++;
                    }
               }
               if(stu[tail-1].x==endx&&stu[tail-1].y==endy)
               {
                    if(stu[tail-1].step<stepmin)
                    {
                         stepmin=stu[tail-1].step;
                    }
               }
          }
          head++;
     }
     if(stepmin==200)
     cout<<"-1\n"<<endl;
     else
     cout<<stepmin; 
     return 0;
} 

img
这里判断一下xxx和yyy的取值范围应该会少走几步,并且如果在这里f已经等于1了,且step大于等于anss可以不用往下走了