为啥我会TLE

P1141 01迷宫

__hjwucj__ @ 2024-02-26 19:23:33

题目链接

#include <bits/stdc++.h>
using namespace std;
int n,m,ans;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
char a[1001][1001];
bool b[1001][1001];
struct node{
    int x,y;
} s;
queue <node> st;
int main ()
{
    cin>>n>>m;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
            cin>>a[i][j];
    for (int i=1;i<=m;i++)
    {
        cin>>s.x>>s.y;
        ans=0;
        st.push (s);
        memset (b,false,sizeof (b));
        while (st.size ()!=0)
        {
            ans++;
            if (a[st.front ().x][st.front ().y]=='0') 
            {
                for (int i=0;i<4;i++)
                {
                    int tx=st.front ().x+dx[i];
                    int ty=st.front ().y+dy[i];
                    if (tx<1||tx>n||ty<1||ty>n) continue;
                    if (b[tx][ty]) continue;
                    if (a[tx][ty]=='0') continue;
                    b[st.front ().x][st.front ().y]=true;
                    b[tx][ty]=true;
                    node l={tx,ty};
                    st.push (l);
                }
            } else
                {
                    for (int i=0;i<4;i++)
                    {
                        int tx=st.front ().x+dx[i];
                        int ty=st.front ().y+dy[i];
                        if (tx<1||tx>n||ty<1||ty>n) continue;
                        if (b[tx][ty]) continue;
                        if (a[tx][ty]=='1') continue;
                        b[st.front ().x][st.front ().y]=true;
                        b[tx][ty]=true;
                        node l={tx,ty};
                        st.push (l);
                    }
                }
            st.pop ();
        }
        cout<<ans<<endl;
    }   
    return 0;
}

by __hjwucj__ @ 2024-02-26 19:24:19

备注:测试点#1,#3,#10,#11TLE


by lizeyuhello @ 2024-03-10 11:17:34

我也是


by I_like_florr_io @ 2024-03-12 08:11:12

可能输入超时了 @hhhcj


|