12.汉诺塔(队列实现)

数据结构采用的 顺序队列

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
#define MAX 100 
int num=0;



typedef struct stack {
        int disc[MAX];
        int top;
        char flag;
        }stack;

void move(stack &a,int n,stack & c, stack &b){
     if(n==1){
          printf("%c移动数据%d到%c\n",a.flag,a.disc[a.top],b.flag);
          num++;
          
          b.top++;
          b.disc[b.top]=a.disc[a.top]; 
          a.top--;
         
          }
     else{    
          move(a,n-1,b,c);
          printf("%c移动数据%d到%c\n",a.flag,a.disc[a.top],b.flag);
          num++;
          b.top++;
          b.disc[b.top]=a.disc[a.top]; 
          a.top--;
          move(c,n-1,a,b);           
          }
     }

int main(int argc, char *argv[])
{
    stack a;
    a.top=4;
    a.flag='A';
    for(int i=1;i<=4;i++){
            a.disc[i]=5-i;
            }
      stack b;
      b.top=0;
      b.flag='B';
       
      stack c;
      c.top=0; 
      c.flag='C'; 
      
      move(a,4,c,b);
       
      printf("一共移动了%d次\n",num);
      
       for(int i=1;i<=4;i++){
           printf("%d",b.disc[i]);
            }   
    system("PAUSE");
    return EXIT_SUCCESS;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值