數位全排列

來源:互聯網
上載者:User

 全排列問題

  這一周的問題是列印出0-7的全排列,看上去是很簡單的題目了,呵呵,,,,難道你想用七層迴圈嗎?呵呵。。不知道時候可行,但是一定不是很好看呀,我的編程習慣告誡我不能這樣,在那本書上看過,最好不要多於三層。  後來張鵬告訴我這是一個深度優先搜尋的問題,看了一下《演算法導論》,不是很懂呀。。。。不過也看出了一些思路,就是對已經用過的元素進行標記,所以我使用了二維數組,經過兩個小時左右的編碼,調試,我終於實現了,而且可以是0-9的全排列。。原始碼如下: #include<stdio.h>#define NUM 10 /* 任意定義數位數目,本題為8 */int a[NUM][2]; /* 儲存數字和狀態 */int b[NUM], total = 0; /* 儲存每次的數字,排列總數 */void init(void) /* 初始化數組 */{int i;for (i = 0; i < NUM; i++) { a[i][0] = i; /* 0——NUM - 1 賦值 */a[i][1] = 0; /* 狀態:0,未使用 */}}void pai(int num)/* 定義排列的函數,參數num表示排列的位置0——NUM-1 */{int i;for(i = 0; i < NUM; i++) {if (a[i][1] == 1) /* 已經使用*/continue;a[i][1] = 1; /* 1,使用 */b[num] = a[i][0]; /* num位的數字 */if(num == NUM - 1){ /* 列印結果 */int j;for (j = 0; j < NUM; j++)printf("%d", b[j]);printf("/n");total++; /* 計數 */a[i][1] = 0; /* 回複為未使用 */return; /* 重新開始 */}pai(num+1); /* 排列下一個 */a[i][1] = 0; /* 回複為未使用  */}}int main(){init(); /* 初始化 */pai(0); /* 開始排列 */printf("the total is %d/n", total);return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.