3 Ocak 2010, Pazar
Daha iyi dize permütasyon yapmak için yöntemler var mı?
void permute(string elems, int mid, int end)
{
static int count;
if (mid == end) {
cout << count << " : " << elems << endl;
return ;
}
else {
for (int i = mid; i <= end; i ) {
swap(elems, mid, i);
permute(elems, mid 1, end);
swap(elems, mid, i);
}
}
}
Yukarıdaki fonksiyonu str
(sabit bir önek str[0..mid-1]
str[mid..end]
bir permutable gibi sonek) permütasyon gösterir. permute(str, 0, str.size() - 1)
bir dize tüm permütasyon göstermek için kullanabiliriz.
Ancak işlev özyinelemeli bir algoritma kullanır; belki performansı geliştirilebilir?
Daha iyi bir dize kapsamalıdır yöntemleri var mı?
CEVAP
3 Ocak 2010, Pazar
Neden std::next_permutation()
std::prev_permutation()
seveceğimi seni
?
Bağlantılar:
std::next_permutation()
std::prev_permutation()
Basit bir örnek:
#include<string>
#include<iostream>
#include<algorithm>
int main()
{
std::string s="123";
do
{
std::cout<<s<<std::endl;
}while(std::next_permutation(s.begin(),s.end()));
}
Çıkış:
123
132
213
231
312
321
Bunu Paylaş:
Nasıl div içeriğini daha büyük değil y...
Nasıl belirli bir dize için depodaki G...
MySQL ınsert NULL veya boş bir dize iç...
WPF dize bir seçilebilir yapmak için b...
Neden küçük bir liste daha küçük bir d...