⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5.txt

📁 行==列==对角线 ◎ 魔幻矩阵
💻 TXT
字号:
我是c++的初学者,想向各位高手请教一点关于c++编程的技巧,

故发表了这篇劣作,希望各位多多指点。

这个程序是关于汉诺塔问题的,我用动态图形将其

演示了出来。

#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#define STATUS int
#include<dos.h>
class ta              //塔类
   {
     private :
 STATUS status;     //塔的状态
 int x;             //坐标及塔上盘的数量
 int z[20];
 int y;
     public :
 ta(){
      status=x=y=0;
      int j;
      for(j=0;j<20;j++)
      z[j]=0;
      }
 ~ta(){}
      void setzb(int a,int b)
  {
   x=a;
   y=b;
  }
      int gethzb()
 {
  return x;
 }
      int getczb()
 {
  return y;
 }
      void setstatus()
 {
  status=status+1;
 }
      STATUS getstatus()
 {
  return status;
 }
      void gbstatus()
 {
   status-=1;
 }
      void setpansz(int x)
 {
  z[status]=x;
 }
      int getpansz()
 {
  return z[status];
 }
  }       ;
class pan      //盘类
   {
     private :
       int size;  //盘的大小
     public:
       pan (){size=0;}
       ~pan(){}
     void setpsz(int x)
       {
 size=x;
       }
     int getpsz()
       {
 return size;
       }
   };
 void jianta(ta &ta1,int x,int y)
     {
      setcolor(BLUE);
      ta1.setzb(x,y);
      line(x,y,x+100,y);
      line(x+50,y-50,x+50,y);
     }

 void jiapan(ta &ta1,pan pan1)   //向塔上加盘
     {
       int x,y;
       STATUS status;
       int a,b;
       x=ta1.getpansz();
       y=pan1.getpsz();
       if(x<=y&&x>0)
 {
  cout<<"can not jia pan"<<endl;
  return ;
 }
 a=ta1.gethzb();
 b=ta1.getczb();
       status=ta1.getstatus();
       setcolor(RED);
       delay(400);
       line( a+50-5*y,b-5*(status+1),a+50-5*y,b-5*status) ;
       line(a+50-5*y,b-5*(status+1),a+50+5*y,b-5*(status+1));
       line(a+50+5*y,b-5*(status+1),a+50+5*y,b-5*status);
       ta1.setstatus();
       ta1.setpansz(y);
     }

 void qupan( ta &ta1)
    {
      int x,y,z;                     //从塔上减盘
      STATUS status;
      x=ta1.gethzb();
      y=ta1.getczb();
      status=ta1.getstatus();
      z=ta1.getpansz();
      setcolor(BLACK);
      line(x+50-5*z,y-5*status,x+50-5*z,y-5*(status-1));
      line(x+50-5*z,y-5*status,x+50+5*z,y-5*status);
      line(x+50+5*z,y-5*status,x+50+5*z,y-5*(status-1));
      ta1.gbstatus();
    }
void move(ta &ta1 ,ta &ta2  )      //移动盘
   {
    int  x;
    pan panx;
    x=ta1.getpansz();
    panx.setpsz(x);
    qupan (ta1);
    jiapan(ta2,panx);
   }
void hannota(int n,ta &ta1,ta &ta2,ta &ta3)
   {
     if (n==1)
     move(ta1,ta3);
     else
       {
 hannota(n-1,ta1,ta3,ta2);
 move(ta1,ta3);
 hannota(n-1,ta2,ta1,ta3);
 }
   }
void main()

 {
  ta ta1,ta2,ta3;
  pan pan1,pan2,pan3,pan4,pan5;
  ta &ta1x=ta1;
  ta &ta2x=ta2;
  ta &ta3x=ta3;
  pan panx[15];
  int driver=DETECT;
  int mode=VGAHI;
  initgraph(&driver,&mode,"E:\\TC3\\BGI");
  setbkcolor(BLACK);
  jianta(ta1x,50,400);
  jianta(ta2x,200,400);
  jianta(ta3x,350,400);
  int j;
  int n;
  for(j=1;j<15;j++)
  panx[j].setpsz(j);
  cout<<"enter the pan shu(1--14)"<<endl;
  do
     {
      cin>>n;
     }while(n<1||n>14);
  for(j=n;j>0;j--)
  jiapan(ta1x,panx[j]);
  hannota(n,ta1x,ta2x,ta3x);
  getch();
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -