1. 程式人生 > >一個深度優先搜尋的小例項——數的全排列

一個深度優先搜尋的小例項——數的全排列

        深度優先搜尋是一個利用遞迴來實現的搜尋演算法,它是資料結構中在“樹”的遍歷中常用的一個很有用的演算法。

        下面的一個小例項實現了輸入一個0到9的數n,輸出這個數的從1-n的所有全排序結果。它體現了深度優先搜尋的設計思想和實現方法。

         好了,下面附上C語言實現的程式碼:

 

#include "stdio.h"
/**
 * 深度優先搜尋:
 *     輸入一個數字n, 全排列1-n: 模擬小盒子
 */
 int n;
 int book[101], a[101];

void dfs(int step)
{
    int i;
    if(step == n+1)
    {
        for(i=1; i<=n; i++)
        {
            printf("%d", a[i]);
        }
        printf("  ");
        return; //返回上一層遞迴
                  //必須要有一個return,不然將一直嘗試sdf(4\5\6...)的i=123,123,123...此時book123均已經等於1,將無限迴圈下去
    }

    for(i=1; i<=n; i++)
    {
        if(book[i] == 0)
        {
            a[i] = step;
            book[i] = 1;

            dfs(step+1); //執行下一步
            book[i] = 0; //將當前一種情況列印後,退一步
        }
    }
    return;
 }

 int main()
 {
     printf("輸入1-9一個數字: ");
     scanf("%d", &n);

     dfs(1);

     return 0;
 }