我写的回溯法,出现了一个BUG,找了好久。。。。才对上。。。

来源:互联网 发布:centos 6.8 升级内核 编辑:程序博客网 时间:2024/04/29 14:29

最終的結果是输入完所有的情况后,没有退出程序。。。

/*
//回溯法
#define N 100
#define M 100
#include<stdio.h>
int com_back(int m,int n)
{
  int a[N];
  int i=0;
  a[i]=1;
do
  {
     if(a[i]-i<=m-n+1)
      {
    if(i==n-1)
      {
        for(int j=0;j<=i;j++)
          {
                printf("%d ",a[j]);
          }
        printf("/n");
               a[i]++;
        continue;
      }
    i++;
    a[i]=a[i-1]+1;
      }
     else
       {
         if(i==0)return 0;
    
         i--;
     a[i]++;
       }


  }while(1);
 return 1;
}
int main()
{
  int m=5,n=3;
  com_back(m,n);
  return 0;
}
*/
/*
#include<stdio.h>
#define N 100
void com_back(int m,int n)
{
  int a[N];
  int i=0;
  a[i]=1;
  int remain;
  remain=m-a[i];
  //  do
  //  int mnt=m/n;
  //  while(a[i]<=mnt)
    do{
      if(i==n-1)
    {
      a[i]+=remain;
      for(int i=0;i<n;i++)
        {
          printf("%d ",a[i]);
        }
      printf("/n");
      i--;
      a[i]++;
      //      a[i+1]=a[i];
      remain=a[i+1]-1;
      //      if(remain<a[i]) return;
    }
      else if(remain>=a[i])
    {
      i++;
      a[i]=a[i-1];
      remain-=a[i];
            if(remain<0) break;
    }
      else
    {
      if(i<1) return;// break;
      i--;
      a[i]++;
      remain=a[i+1]+remain-1;//我一开始用a[i]来代替remain这就是出错的地方
    }

    }while(1);

}
int main()
{
  int m=7,n=3;
  com_back(m,n);
  return 0;
}
*/

后来才改过来了。