再加入一个结点之前判断这个节点是否之前存入过,判断这个节点与目标值的大小

class Solution {
public:
    /**
     * 返回最后要输出的答案
     * @param n int整型 表示牛牛的数字
     * @param m int整型 表示牛妹的数字
     * @return int整型
     */
    int solve(int n, int m) {
        // write code here、
        int dist[2100];
        memset(dist, -1, sizeof(dist));
        queue<int> q;
        dist[n] = 0;
        q.push(n);
        while(!q.empty())
        {
            int t = q.front();
            if(t == m) return dist[t];
            q.pop();
            if(t + 1 <= m && dist[t + 1] == -1)
            {
                q.push(t + 1);
                dist[t + 1] = dist[t] + 1;
            }
            if(t - 1 >= 1 && dist[t - 1] == -1)
            {
                q.push(t - 1);
                dist[t - 1] = dist[t] + 1;
            }
            if(t <= m && t * t <= m + m - n && dist[t * t] == -1)
            {
                q.push(t * t);
                dist[t * t] = dist[t] + 1;
            }
        }
        return 0;
    }
};