zoukankan      html  css  js  c++  java
  • 双色Hanoi塔问题及判断指令

    一.双色Hanoi塔问题

      <<设A、B、C是3 个塔座。开始时,在塔座A 上有一叠共n 个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座A 上的这一叠圆盘移到塔座B 上,并仍按同样顺序叠 置。在移动圆盘时应遵守以下移动规则:

      规则(1):每次只能移动1 个圆盘;

      规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上;

      规则(3):任何时刻都不允许将同色圆盘叠在一起;

      规则(4):在满足移动规则(1)-(3)的前提下,可将圆盘移至A,B,C 中任一塔座上。

    <<试设计一个算法,用最少的移动次数将塔座A 上的n个圆盘移到塔座B 上,并仍按同样顺序叠置。

      对于给定的正整数n,编程计算最优移动方案。

       Input:第1 行是给定的正整数n。

       Output:每一行由一个正整数k 和2 个字符c1 和c2组成,表示将第k个圆盘从塔座c1移到塔座c2上。

       

     1 /*
     2 双色和单色没区别,就加了一条不可重色 
     3 打印出来的n必定是奇偶相邻 
     4 */
     5 #include <iostream> 
     6 using namespace std; 
     7 
     8 int main() 
     9 { 
    10     void hanoi(int,char,char,char); 
    11     int m; 
    12     while(cin >> m)
    13     {
    14         hanoi(m,'A','B','C'); 
    15     }
    16     return 0; 
    17 } 
    18 
    19 void hanoi(int n,char a,char b,char c) 
    20 { 
    21     void move(int,char,char); 
    22     if(n==1) 
    23         move(n,a,b); 
    24     else 
    25     { 
    26         hanoi(n-1,a,c,b); 
    27         move(n,a,b); 
    28         hanoi(n-1,c,b,a); 
    29     } 
    30 } 
    31 
    32 void move(int n ,char x,char y) 
    33 { 
    34     cout<< n << " "<< x << " " << y <<endl;
    35 }

    二.指令判断问题  

      非法指令有以下两种情况:

        1、某个针上已经没有金片了,但是指令依然要求从该处移动金片到其它针上。

        2、把一个大的金片移动到了小的金片上。

      输入 第一行输入一个整数N表示测试数据的组数(N<10) 每组测试数据的第一行有两个整数P,Q(1<P<64,1<Q<100),分别表示汉诺塔的层数与随后指令的条数 随后的Q行,每行都输入两个整数a,b(1<=a,b<=3)表示一条指令。 指令1 2表示把1号针最上面的金片移动到2号针最上面。 数据保证a,b不会相同。 输出 如果存在非法指令,请输出illegal 不存在非法指令则输出legal。

     1 #include<algorithm>
     2 #include<stack>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     int T,i,j,k;
    10     int total, ope;
    11     int from, to;
    12     bool flag;
    13     cin>>T;
    14     while(T--)
    15     {
    16         stack<int> a[4];
    17         for(i=1; i<=4; i++)
    18         {
    19             while(!a[i].empty())
    20                  a[i].pop(); 
    21         }        
    22         flag = true;
    23         cin>>total>>ope;    
    24         for(i = total; i >= 1; --i)
    25             a[1].push(i);
    26         for(i = 0; i < ope; ++i)
    27         {
    28             cin>>from>>to;
    29             if(a[from].empty())
    30             {
    31                 flag = false;
    32                 break;
    33             }
    34             if(!a[to].empty() && (a[to].top() < a[from].top()))
    35             {
    36                 flag = false;
    37                 break;
    38             }
    39             a[to].push(a[from].top());
    40             a[from].pop();
    41         }
    42         puts(flag ? "legal" : "illegal");
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    git命令评测
    so文件成品评论【整理】
    Codeforces 85B. Embassy Queue【段树、馋】
    JPEG图像扩展信息读取和修改
    【 D3.js 入门系列 --- 0 】 简介及安装
    unity3d 学习笔记(三)
    ListView 泛利
    [React] Create an Auto Resizing Virtualized List with react-virtualized
    [PReact] Integrate Redux with Preact
    [Preact] Integrate react-router with Preact
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2947808.html
Copyright © 2011-2022 走看看