zoukankan      html  css  js  c++  java
  • 17.图形化实现汉诺塔

     

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdlib.h>
     4 #include <stdio.h>
     5 #include <stdarg.h>//标准参数
     6 
     7 int a[10][3] = { 0 };
     8 int buzou = 1;//表示步骤数
     9 
    10 //初始化
    11 void init(int a[10][3],int num)
    12 {
    13     for (int i = 0; i < num; i++)
    14     {
    15         a[9 - i][0] = num - i;
    16     }
    17 }
    18 
    19 //显示
    20 void show(int a[10][3])
    21 {
    22     printf("%5c%5c%5c
    ", 'A', 'B', 'C');
    23     printf("----------------------
    ");
    24     for (int i = 0; i < 10; i++)
    25     {
    26         for (int j = 0; j < 3; j++)
    27         {
    28             printf("%5d", a[i][j]);
    29         }
    30         printf("
    
    ");
    31     }
    32 }
    33 
    34 //移动圆盘
    35 void move(char src, char des)
    36 {
    37     int from_id = src - 65;//从第几根柱子移动的?
    38     int to_id = des - 65;
    39     int from_num = 0;//要移动的数字是什么?
    40     //找到from_id从上到下第一个圆盘的数字
    41     for (int i = 0; i < 10; i++)
    42     {
    43         if (a[i][from_id] != 0)
    44         {
    45             from_num = a[i][from_id];
    46             a[i][from_id] = 0;
    47             break;
    48         }
    49     }
    50     //找到to_id从下到上第一个为0的位置,并把盘子移上去
    51     for (int i = 9; i >= 0; i--)
    52     {
    53         if (a[i][to_id] == 0)
    54         {
    55             a[i][to_id] = from_num;
    56             break;
    57         }
    58     }
    59 }
    60 
    61 //汉诺塔
    62 void hanno(int n, char A, char B, char C)
    63 {
    64     if (n == 1)
    65     {
    66         printf("第%d步:", buzou++);
    67         printf("%c----->%c
    ", A, C);
    68         move(A, C);
    69         show(a);
    70     }
    71     else
    72     {
    73         hanno(n - 1, A, C, B);
    74         printf("第%d步:
    ", buzou++);
    75         printf("%c----->%c
    ", A, C);
    76         move(A, C);
    77         show(a);
    78         hanno(n - 1, B, A, C);
    79     }
    80 }
    81 
    82 
    83 void main()
    84 {
    85     int count;//圆盘数量
    86     printf("请输入圆盘数量(1-10)之间:");
    87     scanf("%d", &count);
    88     init(a, count);
    89     show(a);
    90     hanno(count, 'A', 'B', 'C');
    91     system("pause");
    92 }
  • 相关阅读:
    ngnix之笔记
    nginx之"/"结尾
    nginx之root和alias区别
    Python3 操作Excel--openpyxl
    python学习笔记之线程、进程和协程(第八天)
    python之堡垒机(第九天)
    python学习笔记之socket(第七天)
    python学习笔记之paramiko和sqlalchemy (第九天)
    python之在线PK游戏(第六天)
    python学习笔记之类class(第六天)
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8151174.html
Copyright © 2011-2022 走看看