标签:
//主要是图算法方面的, BFS. DFS. 生成树. 最短路径. 二分图. 最大流. 差分约束之类。
1 //直接BFS即可。 注意n>k的情况 2 #include <iostream> 3 #include <string> 4 #include <cstdio> 5 #include <cstring> 6 #include <algorithm> 7 #include <queue> 8 #include <vector> 9 #include <set> 10 #include <map> 11 #include <cstdlib> 12 13 using namespace std; 14 15 int n, k; 16 17 int main() 18 { 19 int ans = 1000000000; 20 while (~scanf("%d%d", &n, &k)) 21 { 22 ans = abs(n-k); 23 if (n >= k) 24 { 25 printf("%d\n", ans); 26 continue; 27 } 28 queue<pair<int, int> > qu; 29 while (!qu.empty()) qu.pop(); 30 set<int> st; 31 qu.push(make_pair(n, 0)); 32 st.insert(n); 33 while (!qu.empty()) 34 { 35 int fir = qu.front().first; 36 int sec = qu.front().second; 37 if (ans <= sec) break; 38 if (fir == k) 39 { 40 ans = sec; 41 break; 42 } 43 else if (fir < k) 44 { 45 if (st.count(fir-1) == 0) qu.push(make_pair(fir-1, sec+1)), st.insert(fir-1); 46 if (st.count(fir*2) == 0) qu.push(make_pair(2*fir, sec+1)), st.insert(2*fir); 47 if (st.count(fir+1) == 0) qu.push(make_pair(fir+1, sec+1)), st.insert(fir+1); 48 } 49 else ans = min(fir-k+sec, ans); 50 qu.pop(); 51 } 52 printf("%d\n", ans); 53 } 54 55 return 0; 56 }
标签:
原文地址:http://www.cnblogs.com/JustForCS/p/4843281.html