BFS, Getting Wrong Answer

Why getting wrong answer

bool issafe(int i,int j,int n,int m)
{
    if(i >= 0 && i < n && j >= 0 && j < m)
        return true;
    return false;
}
vector<vector<int>> updateMatrix(vector<vector<int>>& a) {
    int n = a.size();
    vector<vector<int>> ans(n);
    if(n == 0)return a;
    int m = a[0].size();
    
    for(int i = 0; i < n;i++)
        for(int j = 0;j < m;j++)
            ans[i].push_back(0);       
            
    for(int i = 0; i < n;i++)
    {
        for(int j = 0;j < m;j++)
        {
            if(a[i][j] == 0)
                ans[i][j] = 0;
            else
            {
                queue<pair<int,int>>q;
                q.push({i,j});
                int flag = 0;
                int p = 1;
                while(q.size() > 0)
                {
                    int size = q.size();
                    for(int k = 0 ; k < size;k++)
                    {
                        int cur_i = q.front().first;
                        int cur_j = q.front().second;
                        q.pop();
                        if(a[cur_i][cur_j] == 0)
                        {
                            flag = 1;
                            ans[i][j] = p-1;
                            break;
                        }
                    }
                    if(flag)break;
                    if(issafe(i+p,j,n,m))q.push({i+p,j});
                    if(issafe(i-p,j,n,m))q.push({i-p,j});
                    if(issafe(i,j+p,n,m))q.push({i,j+p});
                    if(issafe(i,j-p,n,m))q.push({i,j-p});
                    p++;
                }
            }
        }
    }
    return ans;
}

what algo did u use? multisource bfs?

See, in multisource bfs you need to place all the source nodes into queue first then apply bfs