Skip to content
Snippets Groups Projects
Select Git revision
  • 1038553da4ea48c71ea1ca8687300c9d056d0712
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

Dockerfile.dev

Blame
  • hanoi-9.c 1.12 KiB
    #include <stdio.h>
    #include <error.h>
    
    #define DISKS 64
    
    int n[3], tower[3][DISKS];
    
    void display (void)
    {
      printf ("\n");
      for (int i = 0; i < 3; i++)
        {
          printf ("tower %d:", i);
          for (int j = 0; j < n[i]; j++)
            printf (" %d", tower[i][j]);
          printf ("\n");
        }
    }
    
    void move (int from, int to, int disks)
    {
      if (disks == 1)
        {
          if (n[from] <= 0)
            error (1, 0, "trying to move disk from empty tower");
          if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1])
            error (1, 0, "trying to move larger disk on smaller one");
          tower[to][n[to]] = tower[from][n[from] - 1];
          n[to]++;
          n[from]--;
          static int counter = 1;
          if (counter++ >= 100000000)
            {
              display ();
              counter = 1;
            }
        }
      else
        {
          int help = 0 + 1 + 2 - from - to;
          move (from, help, disks - 1);
          move (from, to, 1);
          move (help, to, disks - 1);
        }
    }
    
    int main (void)
    {
      n[0] = DISKS;
      for (int i = 0; i < DISKS; i++)
        tower[0][i] = DISKS - i;
      n[1] = 0;
      n[2] = 0;
      display ();
      move (0, 2, DISKS);
      display ();
      return 0;
    }