全排列字典序 【转自旧博】

<textarea cols="50" rows="15" name="code" class="cpp">//STL...一句话而已,不用多讲..速度还可以 #include &lt;iostream&gt; #include &lt;algorithm&gt; #define max 1000 using namespace std; typedef struct ybk{ int x,y;}Point; Point flag[max]; int n; bool cmp(Point at,Point bt){ return at.x&lt;bt.x;} int main() { int i,j,k; cin&gt;&gt;n; for(i=0; i&lt;n; i++) { flag[i].x = 2*i; flag[i].y = 2*i+1;} do{ for(i=0; i&lt;n; i++) cout&lt;&lt;"("&lt;&lt;flag[i].x&lt;&lt;" "&lt;&lt;flag[i].y&lt;&lt;") "; cout&lt;&lt;endl; }while(next_permutation(flag,&amp;flag[n],cmp)); system("pause"); } /////////..按字典序生产算法自己code...ms速度很难比得上STL #include &lt;iostream&gt; #define maxL 1000 using namespace std; int flag[maxL]; int next_permutation(int flag[],int n) { int i,j; for(i=n-1; i&gt;0; i--) if(flag[i]&gt;flag[i-1]) break; if(i==0) return 0; for(j=n-1; j&gt;0; j--) if(flag[j]&gt;flag[i-1]) break; flag[i-1]^=flag[j]^=flag[i-1]^=flag[j];//swap j = n-1; while(i&lt;j){ flag[i]^=flag[j]^=flag[i]^=flag[j]; i++; j--; } return 1; } int main() { int i,j,n; cin&gt;&gt;n; for(i=0; i&lt;n; i++) flag[i] = i; do{ for(i=0; i&lt;n; i++) cout&lt;&lt;flag[i]&lt;&lt;" "; cout&lt;&lt;endl; }while(next_permutation(flag,n)); system("pause"); return 0; } /////// </textarea>

=============

track back: http://blog.chinaunix.net/u/23273/showart_187832.html

=============

你可能感兴趣的:(全排列字典序 【转自旧博】)