#include #include #include #include using namespace std;
const int maxn = 10;
bool visit[maxn];//判斷某個元素是否被訪問過
char sequence[maxn];//存放找到的全排列
void getpermutation(string str, int index)
printf("\n");
}for (int i = 0; i < str.size(); ++i) else
}}int main()
return 0;
}
#include #include #include #include using namespace std;
//非遞迴方式
//依次給出該排列的下乙個排列
bool getnextpermutation(string &str)
// 已經是字典序最大了
if (index < 0)
for (int i = n - 1; i > index; --i)
}reverse(str.begin() + index + 1, str.end());
return true;
}int main() while (getnextpermutation(str));
cout << endl;
}return 0;
}
next_permutation()
和非遞迴方式求全排列的用法一樣,是計算當前序列的下乙個序列,該函式位於algorithm
標頭檔案中。
它有三個引數:
#include #include #include using namespace std;
int main() while (next_permutation(str.begin(), str.end()));
cout << endl;
}return 0;
}
全排列的三種實現
題目描述 生成由1至n個數的全排列。輸入 輸入包含多組樣例,每組樣例輸入乙個整數n 1 n 9 輸出 按照字典序反序輸出,每個數值之間用空格隔開。每個排列單獨佔一行。逆字典序 include include include int num 10 int visited 10 int n,t void...
全排列的三種寫法
給定n個不同的數,要求生成這n個數的全排列!解法1 遞迴思想,首先選定第乙個數 有n種不同的選擇方式 然後對剩下的n 1個數進行全排列 根據此步驟,對剩下n 1數的全排列進行遞迴。void permutation vector ivec,int level for int i level i ive...
總結 三種全排列演算法
1 遞迴演算法 演算法書上有詳細的解釋,複製如下 設r 是要進行排列的n個元素,ri r 集x中元素的全排列記為perm x ri perm x 表示在全排列perm x 的每乙個排列前加上字首ri得到的排列.r的全排列可歸納定義如下 當n 1時,perm r r是集合r中唯一的元素.當n 1時,p...