A到B的最少步数(BFS)

    xiaoxiao2022-06-24  194

    输入n,A,B,输出A到B的最少步数

    三种走法:顺序不变,走过的不走,并且不超出n的范围。 1.向前走,+1 2.向后走,-1 3.跳跃走,*2

    题解:看注释。

    注意:此地方用到了pair<int,int> ,相当于结构体node的两个整型变量,用时需要用make_pair()插入一组数据,访问时需要用.first和.second,访问第一个和第二个数据。

    #include <iostream> #include <cstdio> #include <string> #include <vector> #include <queue> #include <algorithm> using namespace std; typedef long long ll; #define maxn 10005 #define mod 7654321 bool vis[maxn];//标记 struct node { int now,step;//当前位置,步数 node(int x,int y) { now=x; step=y; } }; queue<pair<int,int> > q;//pair<int,int>相当于node,用的时候需要用到make_pair(); queue<node> p; int main() { int n,A,B,now,step; cin>>n>>A>>B; q.push(make_pair(A,0));//放入起始位置 vis[A]=true;//标记为用过 while(!q.empty()) { now=q.front().first;//pair的访问方法 step=q.front().second; q.pop(); if(now==B)//找到终点输出步数后退出 { cout<<step<<endl; break; } if(now+1<=n&&!vis[now+1]) { q.push(make_pair(now+1,step+1));//压入 vis[now+1]=true;//标记 } if(now-1<=n&&!vis[now-1]) { q.push(make_pair(now-1,step+1)); vis[now-1]=true; } if(now*2<=n&&!vis[now*2]) { q.push(make_pair(now*2,step+1)); vis[now*2]=true; } } return 0; }

    最新回复(0)