遞歸實現全排列

#include<stdio.h>
int main()
{
        void print(int n,int a[],int cur);
        int n,a[1000];
        int cur;
        cur=0;
        while(scanf("%d",&n)&&n)
        {
              cur=0;//cur從0開始
               print(n,a,cur);
        }
        return 0;
}
void print(int n,int a[],int cur)//cur是a數組中當前元素的位置指針(下標)
{
         int i,j;
         if(cur==n)
        {
             for(i=0;i<n;i++)
             printf("%d ",a[i]);
             printf("\n");
        }
       else
       {
              for(i=1;i<=n;i++)
             {
                  int ok=1;
                  for(j=0;j<cur;j++)
                  if(a[j]==i)
                     { ok=0; break;  }
                  if(ok)
                  {
                      a[cur] = i;///這裏應該這麼理解,求4的全排列時,當i等於4時,cur纔等於3(下標),
                                     ///所以進入下一個遞歸調用後,cur就等於n了,就會輸出數組a中的元素
                      print(n,a,cur+1);
                  }
             }
        }
}
發佈了62 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章