Advertisement
Guest User

Transforrm

a guest
Nov 25th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int val[23] = {0};
  5. int min_step = 999999999, source, target, k1, k2, n;
  6.  
  7. int first_diff_bit(int n, int m)
  8. {
  9.     int diff = n ^ m;
  10.     int ret = 0;
  11.     while (diff % 2 == 0)
  12.     {
  13.         ret++;
  14.         diff /= 2;
  15.     }
  16.     return ret;
  17. }
  18.  
  19. void find(int curr_num, int curr_step)
  20. {
  21.     if (curr_num == target)
  22.     {
  23.         if (curr_step < min_step)
  24.             min_step = curr_step;
  25.         return;
  26.     }
  27.     if (curr_step >= min_step)
  28.         return;
  29.     int i, k;
  30.     i = first_diff_bit(curr_num, target);
  31.     for (k = k1; k <= k2; k++)
  32.     {
  33.         if (i + k > n)
  34.             break;
  35.         int next_num = curr_num ^ (val[k] << i); // dao k bit tu vi tri i cua curr_num
  36.         find(next_num, curr_step + 1);
  37.     }
  38. }
  39.  
  40. int main()
  41. {
  42.     // Khoi tao mang de dao bit
  43.     int i;
  44.     for (i = 1; i < 23; i++)
  45.         val[i] = (val[i - 1] << 1) + 1;
  46.  
  47.     // Tinh toan va gan cac gia tri
  48.     k1 = 2;
  49.     k2 = 3;
  50.     n = 5;
  51.     source = 8; // 01000
  52.     target = 3; // 00011
  53.  
  54.     // Tim kiem
  55.     find(source, 0);
  56.  
  57.     if (min_step == 999999999)
  58.         printf("Khong the bien doi");
  59.     else
  60.         printf("So buoc bien doi: %d", min_step);
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement