阅读背景:

递归的学习(全排列)

来源:互联网 
/**
                            |--abc(k = 1,i = 1)
     |- -abc(k = 0,i = 0)---| 
     |                      |--acb(k = 1,i = 2)
     |         
     |                      |--bac(k = 1,i = 1)
abc--|- -bac(k = 0,i = 1)---|
     |                      |--bca(k = 1,i = 2)
     |         
     |                      |--cba(k = 1,i = 1)
     |- -cba(k = 0,i = 2)---|
                            |--cab(k = 1,i = 2)
*/

#include<iostream>

using namespace std;

void Permutations(char *p, const int k, const int m)
{
    if(k == m)
    {
        for(int i = 0; i <= m; i++)
            cout << p[i];
        cout << endl;
    }
    else
    {
        for(int i = k; i <= m; i++)
        {
            swap(p[k], p[i]);///完成对应的操作
            Permutations(p, k+1, m);///该处相当于图中的深搜,只是没有明确的节点而已,搜到控制的搜索深度后,进行后退
            swap(p[k], p[i]);///在后退的过程中进行还原
        }
    }
}
int main()
{
    char s[] = "abc";
    Permutations(s, 0, 2);
    return 0;
}
/**
                            |--abc(k = 1,i 



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: