全排列学习

不怎么理解下面的代码啊?谁来解释下

#include<iostream>
#include<string>
using namespace std;
char str[100];
void swap(int i,int j)
{
    char ch=str[i];
    str[i]=str[j];
    str[j]=ch;
}
void Foo(char *str,int s,int e)
{
    int start;
    if(s==0)
        start=s;
    else
        start=s+1;
    for(int i=start;i<e;++i)
    {
        swap(s,i);
            cout<<str<<endl;
        Foo(str,s+1,e);
        swap(s,i);    
    }
}
int main()
{
    cin>>str;
    Foo(str,0,strlen(str));
    return 0;
}

原文地址:https://www.cnblogs.com/xiangshancuizhu/p/1913153.html