Catch That CowC++

其实可以看作一个图,源点是5,5的邻边分别是6,4,10(三种走法),利用BFS,最先遍历17为最少时间。
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node{
int data;
int times;
};
typedef struct node num;
int main(){
int n ,m;
while(cin >> n >> m){
if(n<m){
vector<int> visit;
for(int i=0;i<=2*m;i++){
visit.push_back(0);
}
queue<num> q;
num tem;
tem.data=n;
tem.times=0;
q.push(tem);
visit[n]=1;
while(!q.empty()) {
num tem = q.front();
q.pop();
if (tem.data == m) {
cout << tem.times;
break;
}
if (tem.data + 1 <= 2 * m && visit[tem.data + 1] == 0) {
num x;
x.data = tem.data + 1;
x.times = tem.times + 1;
q.push(x);
visit[x.data] = 1;
}
if (visit[tem.data - 1] == 0) {
num x;
x.data = tem.data - 1;
x.times = tem.times + 1;
q.push(x);
visit[x.data] = 1;
}
if (tem.data * 2 <= 2 * m && visit[2 * m] == 0) {
num x;
x.data = tem.data * 2;
x.times = tem.times + 1;
q.push(x);
visit[x.data] = 1;
}
}
}else{
cout << n-m;
}
}
return 0;
}
结果:

浙公网安备 33010602011771号