8、若s
是n個元素的集合,則
s的冪集
p(s)
定義為s
的所有子集的集合。例如,
s=(a,b,c),p(s)=
。給定s
,寫一遞迴演算法求
p(s)
。(本題
20分)
#include #include // 《資料結構》嚴蔚敏p150 例6.3
void printpowerset(int i, int n)
std::cout << std::endl;
} else }
template void printpowerset(const t * a, int left, int right)
std::cout << std::endl;
} else }
int main()
; printpowerset(a, 0, 5);
return 0;
}
9. 對輸入的任意正整數n,列印出集合的所有非空子集
#include int main()
的全部非空子集
unsigned m = 1;
for (unsigned i = 0; i < n; i++)
m *= 2;
m--;
printf("m = %d\n", m);// 非空子集數
for (unsigned i = 1; i <= m; i++)
printf("\n"); }
return 0;
}
方便:將問題轉化為利用algorithm中的排列方法對01陣列排列,目測優點是可以對付數量很大的情況
#include #include // 顯示在長度為n的陣列a中取m個元素的全部取法
template void disppowerset(const t a, unsigned n, unsigned m)
陣列的全排列,如果為1,則a中相應下標元素被選中
for (size_t i = 0; i < m; i++)
for (size_t i = m; i < n; i++)
do } printf("\n");
} while (std::prev_permutation(mark, mark + n));
free(mark);
}int main()
; disppowerset(a, 5, 3);
return 0;
}
求集合的冪集
集合的冪集a 則a的冪集為 對於求a集合的冪集,a中的元素它只有兩中狀態,它或屬於冪集的元素集,或者不屬於冪集的元素集。求冪集的過程可以看成是對a中元素進行 取 或 舍 的過程。狀態樹如下 葉子節點表示終結狀態,而第i層的分支節點,則表示已對集合a中前i 1個元素進行了取 舍處理的狀態。求冪集的過程...
求集合的冪集
這是朋友叫我幫他寫的,足足幹了兩天,終於在養好精神後把它做出來了,雖然是遞迴實現的,但總算是弄出來了,兩天時間裡搞了好多遍迴圈來實現,但是寫著寫著就迷糊了,洗了個頭,刷了把臉,人精神了,換了遞迴刺溜一下就寫出來了,手動開心 哈哈哈哈。但是據說還可以用分治法 回溯法 窮舉法來實現哦 include i...
求整數冪問題
問題 過程演示 x 3 x x x,x 9 x 3 x 3 x 3,x x 9 x 9 x 9 x 2 x x,x 4 x 2 x 2,x 8 x 4 x 4,x x 8 x 8,x x x 8 x 2 x 上面的方法利用的其實就是分治思想 x n begin displaystyle quad n...