C++編程實戰題解:有重複元素的排列問題(DFS基礎)

題目描述

對n個元素進行全排列,這n個元素由各種字符組成,這n個元素中的某些可能相同

輸入

第一行一個正整數n ,第二行n個字符

輸出

每行一個序列,只輸出前10個序列,不足就全輸出

樣例輸入

<code>4
aa../<code>

樣例輸出

<code>aa..
a.a.
a..a
.aa.
.a.a
..aa
6/<code>

算法分析:

由於給定的元素中可能存在相同的元素,像輸入樣例中字符'a'和'.'就各有兩個,如果直接用回溯法對全部元素進行全排列,就會出現重複的排列。可以先統計出給定的元素中每種字符有幾個,用b[i]表示第i種字符有b[i]個,然後對這些元素進行遍歷時,對i種字符進行n輪遍歷,這樣排除了出現重複排列的可能。

C++編程實戰題解:有重複元素的排列問題(DFS基礎)

參考程序和運行結果:

C++編程實戰題解:有重複元素的排列問題(DFS基礎)

C++編程實戰題解:有重複元素的排列問題(DFS基礎)


分享到:


相關文章: