bfs

来源:互联网 发布:中英文在线翻译软件 编辑:程序博客网 时间:2024/05/20 03:45
 copy
  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <queue>  
  5. #include <stack>  
  6.   
  7. using namespace std;  
  8.   
  9. int N, K;  
  10. int vis[100010];  
  11.   
  12. struct node {  
  13.     int pos;  
  14.     int minute;  
  15. };  
  16.   
  17. int bfs();  
  18.   
  19. int main()  
  20. {  
  21. //    freopen("in.txt", "r", stdin);  
  22. //    freopen("out.txt", "w", stdout);  
  23.   
  24.     cin>>N>>K;  
  25.     memset(vis, 0, sizeof(vis));  
  26.     cout<<bfs()<<endl;  
  27.   
  28.     return 0;  
  29. }  
  30.   
  31. int bfs()  
  32. {  
  33.     queue<node>Queue;  
  34.     node Node;  
  35.     Node.pos = N;  
  36.     Node.minute = 0;  
  37.     vis[Node.pos] = 1;  
  38.     Queue.push(Node);  
  39.     while (!Queue.empty()) {  
  40.         int x = Queue.front().pos;  
  41.         int y = Queue.front().minute;  
  42. //        cout<<x<<endl;  
  43.         Queue.pop();  
  44.         if (x == K) {  
  45.             return y;  
  46.         }  
  47.         if (x-1>=0 && (!vis[x-1])) {  
  48.             vis[x-1] = 1;  
  49.             Node.pos = x-1;  
  50.             Node.minute = y+1;  
  51.             Queue.push(Node);  
  52.         }  
  53.         if (x+1<=100000 && (!vis[x+1])) {  
  54.             vis[x+1] = 1;  
  55.             Node.pos = x+1;  
  56.             Node.minute = y+1;  
  57.             Queue.push(Node);  
  58.         }  
  59.         if (x*2<=100000 && (!vis[x*2])) {  
  60.             vis[x*2] = 1;  
  61.             Node.pos = x*2;  
  62.             Node.minute = y+1;  
  63.             Queue.push(Node);  
  64.         }  
  65.     }  
  66.     return 0;  
  67. }  
0 0