bfs:一维坐标的移动

来源:互联网 发布:c语言标识符可分为 编辑:程序博客网 时间:2024/05/22 03:23

远古坑没填……

在一个长度为 n 的坐标轴上,蒜头君想从 A 点 移动到 B 点。他的移动规则如下:向前一步,坐标增加 1。向后一步,坐标减少 1。跳跃一步,使得坐标乘 2。蒜头君不能移动到坐标小于 0 或大于 n 的位置。蒜头想知道从 A 点移动到 B 点的最少步数是多少,你能帮他计算出来么?输入格式第一行输入三个整数 n,A,B,分别代表坐标轴长度,起始点坐标,终点坐标。(0A,B≤n≤5000)输出格式输出一个整数占一行,代表蒜头要走的最少步数。样例输入10 2 7样例输出3

bfs套板……

#include<bits/stdc++.h>using namespace std;int n,a,b;int vis[5001]={0},dis[5001]={0};int bfs(int x){    queue<int> q;    q.push(x);    vis[x]=1;    int flag=0;    while(!q.empty()){        int t=q.front();        int nxt[]={1,-1,t};        for(int i=0;i<3;i++){            int tx=t+nxt[i];            if(tx<0||tx>n) continue;            if(vis[tx]==0){                vis[tx]=1;                q.push(tx);                dis[tx]=dis[t]+1;            }            if(tx==b)            {                flag=1;                break;            }        }       if(flag==1)           break;//跳出外层循环        q.pop();    }}int main(){    cin>>n>>a>>b;    bfs(a);    cout<<dis[b];    return 0;}
原创粉丝点击