全排列問題(51nod 1384)

2021-08-19 15:54:28 字數 642 閱讀 9568

字串s(包含0-9,可能有重複的字元),按照字典序從小到大,輸出s包括的字元組成的所有排列。

回溯問題,本質是dfs問題。

首先統計字串中各個字元的出現次數,存入陣列cnt[10],然後進行深度搜尋。

深度搜尋的規則為對於第i位,按照字典序0-9,如果cnt[k]不為0,則cnt[k]- -,進行第i+1位的搜尋,回溯回來需要cnt[k]++恢復原樣。

#include 

#include

#define for(n, a, b) for(int n = a; n < b; ++n)

#define for_iter(n, c) for(auto n = c.begin(); n != c.end(); ++n)

using

namespace

std;

void dfs(int* cnt, int l, string head)

else}}

}int main()

; cin >> s;

for_iter(n, s)

cnt[*n - '0'] ++;

dfs(cnt, s.length(), "");

return

0;}

51nod 1384 全排列 遞迴

1384 全排列 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出乙個字串s 可能有重複的字元 按照字典序從小到大,輸出s包括的字元組成的所有排列。例如 s 1312 輸出為 1123 1132 1213 1231 1312 1321 2113 2131 2311 3...

51NOD1384 全排列(全排列函式)

1384 全排列 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出乙個字串s 可能有重複的字元 按照字典序從小到大,輸出s包括的字元組成的所有排列。例如 s 1312 輸出為 input 輸入乙個字串s s的長度 9,且只包括0 9的阿拉伯數字 output 輸出s所...

51nod 1384 全排列 (回溯 STL)

給出乙個字串s 可能又重複的字元 按照字典序從小到大,輸出s包括的字元組成的所有排列。例如 s 1312 輸出為 1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211 input 輸入乙個字串s s的長度 9,且只包括0 9的阿拉伯數...