这种dfs或者bfs只要我们画出树状图就很容易知道具体用哪一种搜索了
思路:
求最短路径用BFS,其实就是一层一层地从左往右搜索,一旦搜到就停止,
收获:
使用vis数组减少重复运算
入队列的简单写法push( (数据类型) { 数据, 数据, 数据…} );
#include <cstdio>
#include <iostream>
#include <queue>
int vis[100001];
using namespace std;
typedef struct
{
int time,index;
}loc;
int main()
{
queue<loc> q;
loc cur,farm,next;
int a,cow;
cin>>a>>cow;
q.push((loc) {0,a});
while(!q.empty())
{
cur=q.front();q.pop();
if(cur.index==cow)
{
cout<<cur.time;
break;
}
cur.time++;
if(cur.index+1>=0&&cur.index+1<=100000&&vis[cur.index+1]==0)
{
vis[cur.index+1]=1;
q.push((loc) {cur.time,cur.index+1});
}
if(cur.index-1>=0&&cur.index-1<=100000&&vis[cur.index-1]==0)
{
vis[cur.index-1]=1;
q.push((loc) {cur.time,cur.index-1});
}
if(cur.index*2>0&&cur.index*2<=100000&&vis[cur.index*2]==0)
{
vis[cur.index*2]=1;
q.push((loc) {cur.time,cur.index*2});
}
}
return 0;
}