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

📄 grary2.h

📁 该包是数据结构的实验软件,来源于合肥工业大学人工智能与数据挖掘实验室,用来实现数据结构.
💻 H
📖 第 1 页 / 共 3 页
字号:
#ifndef __GRARY2_H
#define __GRARY2_H


#if !defined( __TOOLS_H )
#include "tools.h"
#endif



  const int  mnum=2000;
  const int  maxrow=30;
  const int  minrow=0;
  const int  maxcol=30;
  const int  mincol=0;

#ifndef ddarr
#define ddarr
  class Vararray
{private:
    int  *element;
    int size;
    int min;
    int max;
  public:
   Vararray( int m=0,int s=0);
   Vararray();
   int&  operator [](const int index);
   ~Vararray(){ delete []element; }
   };

   Vararray::Vararray(int m,int s)
   {
	size=s-m+1;
	max=s;
	min=m;
	element=new int[size];
	for(int i=0;i<size;i++)
	element[i]=0;
	}

    int & Vararray::operator[](const int index)
     {  return element[index-min];
     }




  class BB2
  {
   public:
     unsigned int numberofrow;
     unsigned int numberofcol;
     unsigned int rowstart;
     unsigned int colstart;
     Vararray array;
     BB2(unsigned int,unsigned int,unsigned int,unsigned int);
     int& select(unsigned int,unsigned int);
     class Row
     {
     public:
       BB2& array2D;
       unsigned int const row;
       Row(BB2& _array2D,unsigned int _row):
       array2D(_array2D),row(_row){}
       int& operator[](unsigned int column)const
	   {return array2D.select (row,column);}
      };

      Row operator[](unsigned int);
      };

      BB2::BB2(unsigned int m=0,unsigned int n=30,
		       unsigned int k=0,unsigned l=30):

      numberofrow(n-m+1),
      numberofcol(l-k+1),
      rowstart(m),
      colstart(k),
      array(0,(n-m+1)*(l-k+1) ){}

      int& BB2::select(unsigned int i,unsigned int j)
      {
      if(i>=rowstart+numberofrow||i<rowstart)
	 {
	 Error("invalid row");
	 exit(0);
	 }
      if(j>=colstart+numberofcol||j<colstart)
	 {
	 Error("invalid column");
	 exit(0);
	 }
      return array[(i-rowstart)*numberofcol+j-colstart+1];
      }

      BB2::Row BB2::operator[](unsigned int row)
      {return Row(*this,row);
      }

#endif

typedef  int datatype;

  class     GrpArr2
	      {public:
		int * ag2;
	      int sseg,oops;
	       boolean	dsb;
	       string name;
	       int sx,sy,h,w,srow,erow,scol,ecol;
	       int arow1,acol1,arow2,acol2;
	       ffield datafd;
	       boolean havefd;
	       int size;
	       GrpArr2(){datafd=nil;}
	       ~GrpArr2(){if(datafd!=nil)farfree(datafd);}
	       } ;


  void  set_trace2_mode(int delaytime);
   void  trace2();
   void  trace2_off();

   int   elmn2high( GrpArr2& ag);
   int   elmn2width(GrpArr2& ag);
   int   sx2(GrpArr2& ag);
   int   sy2(GrpArr2& ag);
   int   row1(GrpArr2& ag);
   int   row2(GrpArr2& ag);
   int   col1(GrpArr2& ag);
   int   col2(GrpArr2& ag);
   void  set_elmn2_size(GrpArr2& ag,int hh,int ww);
   void  set_grparr2_to(GrpArr2& ag,int x,int y);

   void  coord2(GrpArr2& ag,int i,int j,int& x,int& y);
   void  fifild2(GrpArr2& ag,int i,int j,int orxor);
   datatype   elmn2(GrpArr2& ag,int i,int j);
   void  disnodedat2(GrpArr2& ag,int i,int j);
   void  dissub2(GrpArr2& ag);
   void  create_grp_arrbb2(GrpArr2& ag,BB2& b,
		 string	title,int i1,int i2,int j1,int j2);
   void  ret_grp_arrbb2(GrpArr2& ag,BB2& b);
   void  put_elmn2(GrpArr2& ag,int i,int j,datatype v);
   void  move_elmn2(GrpArr2& ag,int i1,int j1,int i2,int j2);
   void  xchg_elmn2(GrpArr2& ag,int i1,int j1,int i2,int j2);
   boolean   cmp_elmn2(GrpArr2& ag,int i1,int j1,int i2,int j2,string op);
    void  initial_arr12(GrpArr2& ag);
   void  initial_GrpArr2(GrpArr2& ag);
   void  cur_cover2(GrpArr2& ag,int i,int j,int orxor);
   void  cur_elmn2_onoff(GrpArr2& ag,int i,int j);
   void  reset_GrpArr2_elmn2(GrpArr2& ag,int i,int j);
   void  reset_GrpArr2(GrpArr2& ag);
   void  clear_GrpArr2_elmn2(GrpArr2& ag,int i,int j);
   void  clear_GrpArr2(GrpArr2& ag);

   void  display_GrpArr2_frame(GrpArr2& ag);
   void  display_GrpArr2_sub2(GrpArr2& ag);
   void  display_GrpArr2_elmns(GrpArr2& ag);
   void  display_GrpArr2_elmn2(GrpArr2& ag,int i,int j);
   void  display_GrpArr2(GrpArr2& ag);
   void  disp_arrbb2(BB2& b,int i1,int i2,int j1,int j2);
   void  move_GrpArr2_to(GrpArr2& ag,int x,int y);
   void  move_GrpArr2_dxy(GrpArr2& ag,int x,int y);
   void  move_GrpArr2_Mid(GrpArr2& ag,int x,int y);
   void  set_GrpArr2_range(GrpArr2& ag);

   void  load_arrbb2_file(BB2& a,int i1,int i2,int j1,int j2,string dosfile);
   void  load_arrbb2(BB2& a,int i1,int i2,int j1,int j2);
   void  save_arrbb2_file(BB2& a,int i1,int i2,int j1,int j2,string dosfile);
   void  save_arrbb2(BB2& a,int i1,int i2,int j1,int j2);
   void  modi_GrpArr2(GrpArr2& ag);
   void  input_GrpArr2(GrpArr2& ag);
   void  modi_arrbb2(BB2& b,int i1,int i2,int j1,int j2);
   void  Rand_GrpArr2(GrpArr2& ag,int  range1,int range2);
   void  reset_arrbb2(BB2& b,int i1,int i2,int j1,int j2);
   void  input_arrbb2(BB2& b,int i1,int i2,int j1,int j2);
   void  rand_arrbb2(BB2& a,int i1,int i2,int j1,int j2,int range1,int range2);
   int   order(GrpArr2& ag,int i,int j);
   int *   nrelptr(int* p,int  rel);
   int *   relptr(int * p,int rel);
   int *  nextptr(int * p);
   int *   grp_elmn2_ptr(GrpArr2& ag,int i,int j);
   void  GrpArr2_range(GrpArr2& ag,int& x1,int& y1,int& x2,int& y2);
   void  clear_GrpArr2_range(GrpArr2& ag);
 //{AnyArr2}
   void  create_grp_AnyArr2(GrpArr2& ag,BB2& b,
		 string	title,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2);
   void  reset_AnyArr2(BB2& b,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2);
   void  reset_AnyArr2All(BB2& b,int i01,int i02,int j01,int j02);
   void  load_anyarr2_file(BB2& a,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2,string  dosfile);
   void  load_AnyArr2(BB2& a,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2);
   void  save_AnyArr2_file(BB2& a,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2,string dosfile);
   void  save_AnyArr2(BB2&  a,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2);
   void  disp_AnyArr2(BB2& a, int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2);
   void  input_AnyArr2(BB2& b,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2);
   void  modi_AnyArr2(BB2& b,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2);
   void  rand_AnyArr2(BB2& b,int i01,int i02,int j01,int j02,int i1,int i2,int j1,int j2,int range1,int range2);

   void load_GrpArr2_file(GrpArr2& ag,string dosfile);
   void save_GrpArr2_file(GrpArr2& ag,string dosfile);
   void load_GrpArr2(GrpArr2& ag);
   void save_GrpArr2(GrpArr2& ag);
   void move_GrpArr2(GrpArr2& ag);
   void move1_GrpArr2(GrpArr2& ag);
   void handle_GrpArr2_event(pmenunode& pmenu,GrpArr2& ag);
   void handle_GrpArr2_menu( mymenu& GrpArr2menu1,boolean& selectorno,
				  pmenunode& pmenu, GrpArr2& ag);
   void handle_GrpArr2(GrpArr2& ag);
   void get_GrpArr2(GrpArr2& ag);
   void get_grp_arrbb2(GrpArr2& ag,BB2& b);
   void get_grp_AnyArr2(GrpArr2& ag,BB2&  b,int i1,int i2,int j1,int j2);
   void get_arrbb2(BB2& b);
   void get_AnyArr2(BB2&  b,int  i1,int i2,int j1,int j2);


//const   {test for GrpArr2}
const int    ComInputGrpArr2=601;
const int     ComRandGrpArr2=602;
const int     ComModiGrpArr2=603;
const int     ComReadGrpArr2=604;
const int     ComSaveGrpArr2=605;
const int     Comsetrange=606;
const int     Comdisp=607;
const int     Commove1=608;
const int     Commove2=609;
const int     ComEditRow1GrpArr2=610;
const int    ComEditRow2GrpArr2=611;
const int    ComEditCol1GrpArr2=612;
const int    ComEditCol2GrpArr2=613;
const int    ComSetHighGrpArr2=614;
const int    ComSetWidthGrpArr2=615;

#ifndef constvar
#define constvar
    const int startrow=30;
    const int keystep=5;
    const int bigstep=40;
    const int sd=4;
    const int d=0;
    const int m=2;
    const int dirnum=6;
    const int mvstep=5;
    const int step=30;
    typedef int move[dirnum][3];
    const move mv={{0,-1,  up },{0,1,down},
		      {-1,0,left},{1,0,right},
		      {-4,0,bigleft},{4,0,bigright}};
 #endif

int trace2_time;

 void set_trace2_mode(int delaytime)
     {   trace2_time=delaytime;	 }
  void trace2_off()
     { trace2_time=0; }
  void trace2()
     {   if (trace2_time<0)
	  Waitanykey();
	else
	    delay(trace2_time);
      }
 int elmn2high(GrpArr2& ag)
     { int elmn2high=ag.h;
     return elmn2high; }
  int elmn2width(GrpArr2& ag)
     { int elmn2width=ag.w;
     return elmn2width; }
  int sx2(GrpArr2& ag)
     { int sx2=ag.sx;
     return sx2; }
  int sy2(GrpArr2& ag)
     { int sy2=ag.sy;
     return sy2; }
  void set_elmn2_size(GrpArr2& ag,int hh,int ww)
     {
     ag.h=hh;ag.w=ww;  }
   void  set_GrpArr2_to(GrpArr2& ag,int x,int y)
     {
     ag.sx=x; ag.sy=y;  }

  void coord2(GrpArr2& ag,int i,int j,int& x,int& y)
     {
     y=ag.sy+ag.h*(i-ag.srow);
     x=ag.sx+ag.w*(j-ag.scol);
      }
  void fifild2(GrpArr2& ag,int i,int j,int orxor)
    {int x,y;
       coord2(ag,i,j,x,y);

	    putimage(x+1,y+1,ag.datafd,orxor);
     }
 int  order( GrpArr2& ag,int i,int j)
     {
      int order=(i-ag.arow1)*(ag.acol2-ag.acol1+1)+j-ag.acol1+1;
      return order;  }
  int far* nrelptr(int far * p, int rel)
    { int far * nrelptr=p+rel;
    return nrelptr;
    }

    int far*relptr(int far*p,int rel)
    {int far * relptr=nil;
	  relptr=p+rel;
     return relptr;   }

  int  far* nextptr(int far*p)
    {int far* nextptr=nil;
	    nextptr=p+1;
	    return nextptr;
	    }

  int far* grp_elmn2_ptr(GrpArr2& ag,int i,int j)
    { int far * grp_elmn2_ptr=relptr(ag.ag2,order(ag,i,j)-1) ;
    return grp_elmn2_ptr; }
   datatype elmn2(GrpArr2& ag,int i,int j) // {ag2[order(ag,i,j)]}
    { datatype elmn2=datatype(* grp_elmn2_ptr(ag,i,j));
     return elmn2;  }
  void disnodedat2(GrpArr2& ag,int  i,int j)
    {int  x,y;
    unsigned char st[8];
       fifild2(ag,i,j,0);fifild2(ag,i,j,1);coord2(ag,i,j,x,y);
	 Convs(elmn2(ag,i,j),st);
	 outtextxy(x+ag.w/4,y+ag.h/2,st);
    }
  void dissub2(GrpArr2& ag )
    {int x,y,i;
     unsigned char st[8];
      for( i=ag.scol;i<=ag.ecol;i++)
	    { coord2(ag,ag.srow-1,i,x,y);
	      x=x+ag.w/2;y=y+ag.h/2;
	      Convs(i,st);
	   outtextxy(x,y,st);
	    }
	 for(i=ag.srow;i<=ag.erow;i++)
	      { coord2(ag,i,ag.scol-1,x,y);
	      x=x+ag.w/2;y=y+ag.h/2;
	      Convs(i,st);
	      outtextxy(x,y,st);
	      }
    }
  void create_grp_arrbb2(GrpArr2& ag,BB2& b,string title,
			     int i1,int i2,int j1,int j2)
     {
	     ag.h=16;
	     ag.w=30; ag.name=title;
	     ag.ag2=&b[b.rowstart][b.colstart];
	      ag.havefd=false;
	      ag.srow=i1;
	      ag.erow=i2;
	      ag.scol=j1;
	      ag.ecol=j2;
	      ag.arow1=b.rowstart;
	      ag.acol1=b.colstart;
	      ag.arow2=b.rowstart+b.numberofrow-1;
	      ag.acol2=b.colstart+b.numberofcol-1;
     }
       int  row1(GrpArr2& ag)
    { int row1=ag.srow;
    return row1; }
  int  row2(GrpArr2& ag)
    { int row2=ag.erow;
    return row2; }
  int   col1(GrpArr2& ag)
    { int col1=ag.scol;
    return col1; }
 int  col2(GrpArr2& ag)
    {int  col2=ag.ecol;
    return col2;
    }

  void put_elmn2(GrpArr2& ag,int i,int j,datatype  v)
       { * grp_elmn2_ptr(ag, i,j)=v;
	disnodedat2(ag,i,j);  }
  void move_elmn2(GrpArr2& ag,int i1,int j1,int i2,int j2)
     {int  x,y;
      fifild2(ag,i1,j1,1);
      getch();
      fifild2(ag,i1,j1,1);
      disnodedat2(ag,i2,j2);
       fifild2(ag,i2,j2,1);
       * grp_elmn2_ptr(ag, i2,j2)=elmn2(ag, i1,j1);
       fifild2(ag,i2,j2,1);
       disnodedat2(ag,i2,j2);
       getch();
     }
 void xchg_elmn2(GrpArr2& ag,int i1,int j1,int i2,int j2)
    { int x,y;
    datatype te;
      fifild2(ag,i1,j1,1);fifild2(ag,i2,j2,1);getch();
     disnodedat2(ag,i1,j1);disnodedat2(ag,i2,j2);
      te=elmn2(ag, i2,j2);
     * grp_elmn2_ptr(ag, i2,j2)=elmn2(ag, i1,j1);
	   * grp_elmn2_ptr(ag, i1,j1)=te;
	   disnodedat2(ag,i1,j1);disnodedat2(ag,i2,j2);getch();
     }
 boolean  cmp_elmn2(GrpArr2& ag,int i1,int j1,int i2,int j2,string op)
     {int x1,y1,x2,y2,x3,y3,x4,y4;
     datatype v1,v2;
     boolean cmp;
       disnodedat2(ag,i1,j1);disnodedat2(ag,i2,j2);
	    fifild2(ag,i1,j1,1);  fifild2(ag,i2,j2,1);getch();
	    disnodedat2(ag,i1,j1); disnodedat2(ag,i2,j2);
	    v1=elmn2(ag,i1,j1);   v2=elmn2(ag,i2,j2);
	    cmp=boolean(!strcmp(op,"=")&&(v1==v2)||(!strcmp(op,">") && (v1>v2)));
	    cmp=boolean(cmp||(!strcmp(op,"<")&& (v1<v2)) ||(!strcmp(op,"!=") &&(v1!=v2)));
	    cmp=boolean(cmp||(!strcmp(op,"<=") &&(v1<=v2)) ||(!strcmp(op,">=")&&(v1>=v2)));


	    return cmp;

      }
  void initial_arr12(GrpArr2& ag)
   {int   i,may;
	Into_graph();
	setcolor(WHITE);
	setfillpattern(fillmode,fillcolor);
	if (ag.havefd==true)
	       farfree(ag.datafd);
	  ag.havefd=true;
	    bar(2,2,ag.w-1,ag.h-1);
	    ag.size=imagesize(2,2,ag.w-1,ag.h-1);
	    ag.datafd=farmalloc(ag.size);
	    getimage(2,2,ag.w-1,ag.h-1,ag.datafd);
	    putimage(2,2,ag.datafd,1);

     }
  void initial_GrpArr2(GrpArr2& ag)
     {   initial_arr12(ag);
	  ag.sx=100;
	  ag.sy=100 ;
     }
  void cur_cover2(GrpArr2& ag,int i,int j,int orxor)
     {  fifild2(ag,i,j,orxor);     }
  void  cur_elmn2_onoff(GrpArr2& ag,int i,int j)
     {  fifild2(ag,i,j,1);     }
  void reset_GrpArr2_elmn2(GrpArr2& ag,int i,int j)
     {  put_elmn2(ag,i,j,0);

⌨️ 快捷键说明

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