网站底部关键词宁波seo网站推广软件
传送门
题意翻译
题目描述: 高桥君要调整空调的设定温度。现在的设定温度是A度,而他想调到B度。 空调遥控器按一次可以:
上调或下调1度
上调或下调5度
上调或下调10度 高桥君想求出从A调到B度的最小操作数。
输入格式: 输出以下列形式给出。
A B
0<=A,B<=40
输出格式: 输出最小操作数。
样例与说明:
样例1: 输入:
7 34
输出:
5
依次上调10、10、5、1、1度即可
样例2: 输入:
19 28
输出:
2
上调10度、下调1度即可。
样例3: 输入:
10 10
输出:
0
数据较小,直接bfs即可
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <math.h>
#include <map>
#include <queue>
#define maxn 1000005
#define M(x,y) make_pair(x,y)
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
int vis[200];
struct sa
{int x;int step;
};
int n,k,a,b,ans;
queue<sa>q;
void bfs()
{while(!q.empty()){int xx=q.front().x,ans=q.front().step;q.pop();if(xx==b){printf("%d\n",ans );return;}if(xx-1>=0&&!vis[xx-1]){sa p;p.x=xx-1;p.step=ans+1;vis[p.x]=1;q.push(p);}if(xx-5>=0&&!vis[xx-5]){sa p;p.x=xx-5;p.step=ans+1;vis[p.x]=1;q.push(p);}if(xx-10>=0&&!vis[xx-10]){sa p;p.x=xx-10;p.step=ans+1;vis[p.x]=1;q.push(p);}if(xx+1<=40&&!vis[xx+1]){sa p;p.x=xx+1;p.step=ans+1;vis[p.x]=1;q.push(p);}if(xx+5<=40&&!vis[xx+5]){sa p;p.x=xx+5;p.step=ans+1;vis[p.x]=1;q.push(p);}if(xx+10<=40&&!vis[xx+10]){sa p;p.x=xx+10;p.step=ans+1;vis[p.x]=1;q.push(p);}}
}
int main()
{//freopen("in.txt","r",stdin);while(scanf("%d%d",&a,&b)!=-1){ans=0;sa p;p.x=a;p.step=0;q.push(p);bfs();}return 0;
}