题意:输入两个参数start 和 end; start每次只能走自己的约数(除去1和本身),走到新位置时也是一样的规则。求从start到end最少需要的step?
如输入4 和 24,需要5步; 为4-6-8-12-18-24.
#include<iostream>
#include<vector>
using namespace std;
static int minstep=INT_MAX;
vector<int> yNum(int num)
{
vector<int> y;
if(num<=3) return y;
for(int i=2;i<num;i++)
{
if(num%i==0)
y.push_back(i);
}
return y;
}
void backTrack(int start, int end, int step)
{
if(start==end)
{
if(step<minstep)
minstep=step;
return;
}
if(start>end)
return;
vector<int> k=yNum(start);
if(k.size()==0)
return;
step++;//注意问题
for(int i=0;i<k.size();i++)
{
backTrack(start+k[i],end,step);
}
}
int main()
{
int start;
int end;
cin>>start>>end;
backTrack(start,end, 0);
cout<<minstep<<endl;
return 0;
}