Advertisement
SuitNdtie

Bulb

May 28th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<queue>
  3. using namespace std;
  4.  
  5. struct elem{
  6.     int state;
  7.     int dis;
  8.     bool operator < (const elem& rhs)const
  9.     {
  10.         return dis > rhs.dis;
  11.     }
  12. };
  13.  
  14. int main()
  15. {
  16.     int n;
  17.     scanf("%d",&n);
  18.     if(n == 1){
  19.         int x;
  20.         scanf("%d",&x);
  21.         printf("%d",x);
  22.         return 0;
  23.     }
  24.    
  25.     int state = 0;
  26.     for(int i = n - 1 ; i >= 0 ; i --){
  27.         int x;
  28.         scanf("%d",&x);
  29.         state += (1<<i)*x;
  30.     }
  31.     bool visited[(1<<n)];
  32.     int dist[(1<<n)];
  33.    
  34.     for(int i = 0 ; i < (1<<n) ; i ++){
  35.         visited[i] = false;
  36.         dist[i] = 1e9;
  37.     }
  38.     dist[state] = 0;
  39.    
  40.    
  41.     int ans = -1;
  42.     queue<int> q;
  43.     q.push(state);
  44.     while(!q.empty()){
  45.         int u = q.front();//.state;
  46.         q.pop();
  47.         if(u == 0){
  48.             break;
  49.         }
  50.         for(int i = 0 ; i < n ; i ++){
  51.             int xp;
  52.             if(i == 0){
  53.                 xp = u xor (1<<0);
  54.                 xp = xp xor (1<<1);
  55.             }
  56.             else if(i == n - 1){
  57.                 xp = u xor (1<<n-1);
  58.                 xp = xp xor (1<<n-2);
  59.             }
  60.             else{
  61.                 xp = u xor (1<<i);
  62.                 xp = xp xor (1<<(i+1));
  63.                 xp = xp xor (1<<(i-1));
  64.             }
  65.             if(!visited[xp] && dist[u] + 1 < dist[xp]){
  66.                 dist[xp] = dist[u] + 1;
  67.                 q.push(xp);
  68.             }
  69.         }
  70.     }
  71.     printf("%d",(dist[0] == 1e9 ? -1 : dist[0]));
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement