C++实现回溯

来源:互联网 发布:淘宝货比三家什么意思 编辑:程序博客网 时间:2024/05/23 11:46

#include <stdio.h>
int i=0;
void dian(float a,float b,float c,float d,int j);  /*回朔声明*/
void jia(float a,float b,float c,float d,int j)   /*进行加的运算*/
  {if ((a*b!=0)&&(j<4)&&(i!=1))
     {dian(a+b,c,d,0,j+1);
     if (i==1)
 printf("%g=%g+%g\n",a+b,a,b);}
  }
void jian(float a,float b,float c,float d,int j)  /*进行减的运算*/
  {if ((a*b!=0)&&(j<4)&&(i!=1))
     {dian(a-b,c,d,0,j+1);

      dian(b-a,c,d,0,j+1);
     if (i==1)
       printf("%g=%g-%g\n",a-b,a,b);}
  }
void cheng(float a,float b,float c,float d,int j)  /*进行乘的运算*/
  {if ((a*b!=0)&&(j<4)&&(i!=1))
     {dian(a*b,c,d,0,j+1);
     if (i==1)
       printf("%g=%g*%g\n",a*b,a,b);}
  }
void chu(float a,float b,float c,float d,int j)   /*进行除的运算*/
  {if ((a*b!=0)&&(j<4)&&(i!=1))
     {dian(a/b,c,d,0,j+1);
     if (i==1)
       printf("%g=%g/%g\n",a/b,a,b);}
  }
void dian(float a,float b,float c,float d,int j)  /*进行回朔*/
  {
   jia(a,b,c,d,j);
   cheng(a,b,c,d,j);
   jian(a,d,b,c,j);
   chu(a,d,b,c,j);
   jia(a,c,b,d,j);
   cheng(a,c,b,d,j);
   jia(a,d,c,b,j);
   cheng(a,d,c,b,j);
   jian(a,b,c,d,j);
   chu(a,b,c,d,j);
   jian(b,a,c,d,j);
   chu(b,a,c,d,j);
   jian(d,a,b,c,j);
   chu(d,a,b,c,j);
   jian(a,c,b,d,j);
   chu(a,c,b,d,j);  /*进行交换(这里可以用程序嵌套简化)*/
   if ((j==3)&&(a+b+c+d==24))   /*运算的结果是否是24,如果为24将记号改为1*/
       i=1;
  }
void main()
  {float a,b,c,d;
   printf("input 4 num");
   scanf("%f%f%f%f",&a,&b,&c,&d);
   if (i==0) dian(a,b,c,d,0);
   if (i==0) dian(b,a,c,d,0);
   if (i==0) dian(c,b,a,d,0);
   if (i==0) dian(d,a,b,c,0);
  }

原创粉丝点击