国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于全排列算法,大家請指導!

2019-11-17 05:47:21
字體:
來源:轉載
供稿:網友
關于全排列算法,大家請指導!我不知道大家有沒有聽說,明年起程序員考試就不分初,中,高級了,而我們軟件專業明年就要過程序了,據說相當于考中程,或者還要難一些,雖然不知道消息的正確性,但這的確是我們的老師告訴我們的,所以老師就出一些題給我們練,下面是一道關于數學中全排列的算法的問題,編了我4天!真是的看起來輕易,編起來難..........下面給出我的源代碼,并給大家解釋我的思路:/***********************************************/
void chang(char str[],int m)  /*定義循環左移函數(我沒有用左移函數)*/
 {
  int i,j;
  char temp=str[0];
  for (i=0;i<m;i++) str[i]=str[i+1];
  str[i]=temp;
 }
void pai(char str[],int m,int n) /*定義全排列函數*/
{
 int k;
 void chang(char str[],int m);
 if (m<n)        /* 定 義 遞 歸 調 用 出 口  */
  {
   for (k=0;k<=m;k++)
    {
     pai(str,m+1,n); /*遞歸調用*/
     chang(str,m); /*調用左移函數*/
    }
  }
 else }
#include "stdio.h"
main()
{char str[]="ABCD"; /*全排列字符,可以任意多個(相應的下面排列函數中參數"4"改成全排列字符的個數)*/
clrscr();
pai(str,0,4); /*這里參數0(下標)表示從第一個元素開始,4表示元素個數(不是下標)*/
getch();
}
/*********************************************/下面我來解釋一下,我花了近1天的時間,找到這樣一個規律如下:
                           ┏ ABCD
                           ┣ BCDA
                 ┏ ABCD ━┫
                 ┃        ┣ CDAB
       ┏ ABCD ━╋ BCAD   ┗ DABC
       ┃        ┃         .
       ┃        ┗ CABD    .
ABCD ━┫                   .               
       ┃        ┏ BACD    .
       ┃        ┃         .
       ┗ BACD ━╋ ACBD   ┏ CBAD
                 ┃        ┣ BADC
                 ┗ CBAD ━┫
                           ┣ ADCB
                           ┗ DCBA
簡化圖如下所示 ==>
                     ┏ ABCD
                     ┣ BCDA
            ┏ ABC ━┫
            ┃       ┣ CDAB
    ┏ AB ━╋ BCA   ┗ DABC
    ┃      ┃        .
    ┃      ┗ CAB    .
A ━┫                .               
    ┃      ┏ BAC    .
    ┃      ┃        .
    ┗ BA ━╋ ACB   ┏ CBAD
            ┃       ┣ BADC
            ┗ CBA ━┫
                     ┣ ADCB
                     ┗ DCBA
大家看到了,以上就是一步一步循環左移就能得到所有全排列的數了.以上程序在Trubo C 2.0 中運行通過,假如大家還有什么疑問,請加我
QQ:156301529,Email:rodgersnow@163.com,我們共同討論.另外,我在想,假如是n個數或字符中取m個進行排列的話,該怎么改呢?目前正在考慮中,本人覺得難度很大,希望大家能幫幫我,請加我QQ,謝謝!
另附我在網上找到的經典全排列算法,叫"后補法",大家自己好好研究吧,在Trubo C 2.0 中運行通過了的.
#include <stdio.h>
void permutation(char a[], int m, int n)
{
int i;
char t;
if (m<n-1) {
permutation(a, m+1, n);
for (i=m+1;i<n;i++) {
t=a[m]; a[m]=a[i]; a[i]=t;
permutation(a, m+1, n); t=a[m]; a[m]=a[i]; a[i]=t;
}
} else
{
 printf("%s ", a);
}
}
int main() {
char a[]="ABCDE";
permutation(a, 0,5);
return 0;
}  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎鲁特旗| 延寿县| 新巴尔虎左旗| 连江县| 和平区| 和田县| 鄂伦春自治旗| 永善县| 宾阳县| 高陵县| 嘉义县| 台东县| 内乡县| 仁寿县| 高要市| 玉门市| 渭南市| 临夏市| 宽甸| 永川市| 界首市| 莱西市| 密山市| 玉环县| 班戈县| 锡林郭勒盟| 息烽县| 巫溪县| 衡阳市| 钦州市| 武强县| 莲花县| 崇明县| 绥滨县| 安溪县| 福泉市| 博湖县| 宣威市| 灌云县| 望谟县| 莫力|