資源簡介
一個程序,很好的。是關于如何用回溯法求子集和的。
代碼片段和文件信息
//?子集和.cpp?:?定義控制臺應用程序的入口點。
//
#include?“stdafx.h“
#include?“stdio.h“
#include?“iostream“
using?namespace?std;
int?backtrack(int?arr[]int?nint?sum);
struct?SUBBUFF
{
int?data;//存放當前的值
char?IsIn;//記錄當前值是否加入了子集
};
int?main(int?argc?char*?argv[])
{
int?nsum;?//定義了集合元素個數,以及要求的子集的和
cout<<“輸入元素個數:“;
cin>>n;
cout<<“輸入要求的子集和:“;
cin>>sum;
SUBBUFF?*arr?=?new?SUBBUFF[n];
int?i=0;
cout<<“初始的集合元素“< for?(i=0;i {
cin>>arr[i].data;
arr[i].IsIn?=?‘N‘;//將當前的值的初始化狀態設為?‘N‘表示不在子集中
}
int?pointto?=?0countsum?=?0;//當前指向的角標,和現在的子集和
while?(pointto>=0)//進入循環,開始回溯
{
if?(arr[pointto].IsIn?==?‘N‘)//向子集里面增加值
{
countsum?+=arr[pointto].data;
arr[pointto].IsIn?=?‘Y‘;
if?(countsum?==?sum)//找到答案,輸出結果
{
- 上一篇:最小生成樹的源代碼(C++實現)
- 下一篇:最速下降法c語言實現
評論
共有 條評論