這是一個全排列算法的C++模板, 與STL中泛型算法next_permutation的功能是一樣的。
template < typename T >
bool _next_permutation( T *first, T *last );
#define N 8
int main(int argc, char* argv[])
{
int i;
int y = 1;//序號
char a[N];
for ( i=0; i<N; i++ )
{
a[i] = i + 1 + 64 + 32;
}
long t0 = time( NULL );
do
{
cout << y << " ---> ";
for ( i = 0; i<N; i++ ) cout << a[i];
cout << endl;
y++;
}while( _next_permutation( &a[0], &a[N] ) );
long t1 = time( NULL ) - t0;
cout << t1 << endl;//當N為8時耗時130秒,與泛型算法next_permutation用時一樣
return 0;
}
template < typename T >
bool _next_permutation( T *first, T *last )
{
int i;
int j;
int x = -1;
int rang = last - first;
for ( i=0; i<rang-1; i++ )
{
if ( *( first+i ) <= *( first+i+1 ) )
{
x = i;
}
}
if ( x != -1 )
{
for ( i=x; i<rang; i++ )
{
if ( *( first+x ) <= *( first+i ) )
{
j = i;
}
}
_swap( *( first+x ), *( first+j ) );
for ( i=x+1; i<rang; i++ )
{
if ( i != rang + x - i )
{
int nSwap = rang + x - i;
_swap( *( first+i ), *( first+ ( rang+x-i ) ) );
}
if ( ( i + 1 ) * 2 > rang + x )
{
break;
}
}
}
if ( -1 == x ) return false;
else return true;
}
template < typename T >
void _swap( T &a, T &b )
{
a = a + b;
b = a - b;
a = a - b;
}
FeedBack:
# re: 全排列算法(Using c++ template):
只有注冊用戶登錄后才能發表評論。 | ||
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
![]() |
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | |||
15 | 16 | 17 | 18 | 19 | 20 | 21 | |||
22 | 23 | 24 | 25 | 26 | 27 | 28 | |||
29 | 30 | 1 | 2 | 3 | 4 | 5 |
常用鏈接
留言簿(1)
隨筆分類
隨筆檔案
文章分類
文章檔案
搜索
最新評論

- 1.?re: 硬幣找錢問題[未登錄]
-
搜著搜著居然找到這兒了,MARK。
崔,用DP寫了沒? - --Shane
- 2.?re: 硬幣找錢問題
- 評論內容較長,點擊標題查看
- --崔佳星
- 3.?re: 硬幣找錢問題
- 評論內容較長,點擊標題查看
- --崔佳星
- 4.?re: 硬幣找錢問題
- 已經修改了,可以過全部數據!!!!!
- --崔佳星
- 5.?re: 硬幣找錢問題
- 以上算法沒有考慮一種情況,就是剩余幣值不足以支付。
- --崔佳星