再加入一个结点之前判断这个节点是否之前存入过,判断这个节点与目标值的大小
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; } };