A,B两个整数,要求从A通过+-12, +-7, +-5这六步来变成B, 问A转换到B所需的最少步
个人觉得是动态规划,有哪位高手能给出代码,非常感谢
[解决办法]
#include <iostream>
#define SIZE 1000
using namespace std;
int que[SIZE*SIZE];
int prev[SIZE];
int path[SIZE];
int top;
int Mark[SIZE*SIZE];
const int ave = SIZE*SIZE/2;
int step[] = {12,-12,7,-7,5,-5};
void bfs(int a,int b)
{
int front = 0;
int rear = 1;
que[front] = a;
Mark[ave + a] = true;
while(front < rear)
{
int u = que[front];
for(int i = 0 ; i < 6 ; i ++ )
{
if(Mark[ave + u + step[i]])
continue;
que[rear] = u + step[i];
prev[rear] = front;
Mark[ave + que[rear]] = true;
if(u + step[i] == b)
{
goto mark;
}
rear++;
}
front++;
}
mark:;
while(rear)
{
path[top++] = que[rear];
rear = prev[rear];
}
path[top++] = a;
}
int main()
{
int a,b;
while(cin>>a>>b)
{
memset(Mark,false,sizeof(Mark));
top = 0;
bfs(a,b);
cout<<"the path is :"<<endl;
while(top-->1)
{
cout<<path[top]<<" --> ";
}
cout<<path[0]<<endl;
}
}