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

📄 theoperaterofcars.cpp

📁 该文件主要是包含车辆调度问题的处理。通过一个简单的程序采用递归调用算法实现该功能!
💻 CPP
字号:

#include<stdio.h>
#include<stdlib.h>
#define stack_init_size  100
#define stackincrement 10
#define error 0
#define ok    1
#define overflow  -2


//栈结构的定义
struct sqstack 
{
	   int *base;
       int *top;
       int stacksize;
       };


     //创建一个空栈
     int initstack(sqstack  &s)
     {
     s.base=(int*)malloc(stack_init_size*sizeof(int));
     if(!s.base) exit(overflow);
     s.top=s.base;
     s.stacksize=stack_init_size;
     return 0;
    }


     //进栈操作
     int push(sqstack &s,int e)
     {
         if((s.top-s.base)>=s.stacksize)
         {
         s.base=(int *)realloc(s.base,(s.stacksize+stackincrement)*sizeof(int));
         if(!s.base) exit(overflow);
         s.top=s.base+s.stacksize;
         s.stacksize+=stackincrement;
         }
         *s.top++=e;
         return ok;
     }


     //退栈操作
     int pop(sqstack & s,int &e)
     {
         if(s.top==s.base) 
         return error;
         e=*--s.top;
         return ok;
     }


     //打印出结果
     void print(int b[],int n)
     {
          int k;
          for(k=0;k<n;k++)
          printf("%d" ,b[k]);
          printf("\n");
     }


     //判断栈是否为空
	   int stackempty(sqstack s)
     {
         if(s.top==s.base)
          return 1;
          else return 0;
     }

    
	 //递归算法求出所有可能的输出序列
     void display(sqstack s,int a[],int b[],int p,int q,int n)
     {
          if(p<n)
          {
                 push(s,a[p]);
                 display(s,a,b,p+1,q,n);
                 pop(s,b[q]);
          }
          if(!stackempty(s))
          {
                 pop(s,b[q]);
                 display(s,a,b,p,q+1,n);
                 push(s,b[q]);
          }
          if(q>=n&&stackempty(s))
          print(b,n);
          
     }
     
      int main ()
     {
         int i,n,a[stack_init_size];
         int b[stack_init_size];
         printf("请输入车厢的个数: "); 
         scanf("%d",&n);
         sqstack  s;
         initstack(s);
         for(i=0;i<n;i++)
         a[i]=i+1;
         
		 printf("依次进栈序列为:\n");
		 for(i=0;i<n;i++)
		 printf("%d",a[i]);
		 printf("\n");
         printf("请输出车厢的序列号:\n");
         display(s,a,b,0,0,n);
         return 0;
     } 
	 

⌨️ 快捷键说明

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