精品偷拍一区二区三区,亚洲精品永久 码,亚洲综合日韩精品欧美国产,亚洲国产日韩a在线亚洲

  • <center id="usuqs"></center>
  • 
    
  • 幾種求排列數(shù)的方法

    幾種求排列數(shù)的方法
    例如:給出n=3
    求得所有的排列數(shù)為 1 2 3 ,1 3 2,2 1 3,2 3 1,3 1 2 ,3 2 1
    一共有幾種算法可以求出這個(gè)結(jié)果呀?
    其他人氣:779 ℃時(shí)間:2020-05-24 14:04:47
    優(yōu)質(zhì)解答
    前面的熱心網(wǎng)友回答的那種窮舉法可以,但比較耗時(shí)且不易擴(kuò)展.
    全排列問(wèn)題其實(shí)就是一個(gè)深度搜索的問(wèn)題,一般采取回溯法來(lái)解決.
    當(dāng)然就具體問(wèn)題還要考慮剪枝等細(xì)節(jié)問(wèn)題,不過(guò)你這里只是全排列就不用考慮那么多了.
    比較有名的題目是八皇后問(wèn)題.
     
    下面給一個(gè)全排列問(wèn)題的遞歸解法,改變N的值可以對(duì)不同數(shù)進(jìn)行全排列.
    如果要求輸入n來(lái)全排列的話把數(shù)組a改成動(dòng)態(tài)分配,并作為參數(shù)送入各個(gè)函數(shù)就行了.
     
    #include <iostream>
    using namespace std;
    #define N 3
    int a[N];
    void printSeq()
    {
     for(int i=0; i<N; i++) cout << a[i] << " ";
     cout << endl;
    }
    bool isok(int i, int k)
    {
     for(int j=0; j<i; j++)
     {
      if(a[j] == k) return false;
     }
     return true;
    }
    void calcSeq(int i)
    {
     if(i==N) printSeq();
     else
     {
      for(int k=1; k<=N; k++)
      {
       if(isok(i, k))
       {
        a[i] = k;
        calcSeq(i+1);
       }
      }
     }
    }
    int main()
    {
     calcSeq(0);
     return 0;
    }
     
    另外也有非遞歸解法,模擬一個(gè)棧來(lái)做
    我來(lái)回答
    類似推薦
    請(qǐng)使用1024x768 IE6.0或更高版本瀏覽器瀏覽本站點(diǎn),以保證最佳閱讀效果。本頁(yè)提供作業(yè)小助手,一起搜作業(yè)以及作業(yè)好幫手最新版!
    版權(quán)所有 CopyRight © 2012-2024 作業(yè)小助手 All Rights Reserved. 手機(jī)版