一个呆头呆脑的小白
2021-10-10 09:20
采纳率: 0%
浏览 15

回溯法求组合问题1-你中取K个不同的数

求循环里面的if(a[i]-i<=n-r+1)//可以向试探
为何判断条件是a[i]-i<=n-r+1

#include<bits/stdc++.h>
#define max 50
int a[max];
void F(int n, int r)
{
int i,j;
i=0;
a[i]=1;
while(1)
{
if(a[i]-i<=n-r+1) //可以向前试探//
{
if(i==(r-1)) //找到一个组合//
{
for(j=0;j<r;j++) //输出当前组合r个一个组合//
printf("%4d",a[j]);
printf("\n");
a[i]++;
continue;
}
i++; //向前试探//
a[i]=a[i-1]+1;
}
else //回溯//
{
if(i==0) //找完全部解//
return;
a[--i]++;
}
}
}
int main(void)
{
int n,r;
printf("Enter n r :");
scanf("%d%d",&n,&r);
printf("正整数1~%d中的%d个数的任意组合:\n",n,r);
F(n,r);
}

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题