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


京公网安备 11010502036488号