请高手为下面这段排列生成的代码加一下注释,并讲一下是用的什么算法,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/29 21:35:27
#include <stdio.h>

int n;
int visited[20];
int workarr[20];

void DFS(int l)
{
int i;
if (l == n)
{
for (i=0; i<l; i++)
printf("%d", workarr[i]+1);
printf("\n");
return;
}
for (i=0; i<n; i++)
if (!visited[i])
{
visited[i] = 1;
workarr[l] = i;
DFS(l+1);
visited[i] = 0;
}

}

int main()
{
int i;
while (scanf("%d", &n) != EOF)
{
for (i=0; i<n; i++)
visited[i] = 0;
DFS(0);
}
return 0;
}

注释就免了,看那东西还不如自己思考。
这个是运用的深度优先搜索,就是dfs
好像是depth first search
他是通过维护一个栈来产生全排列
也就是穷举法
至于这个程序一看就知道是acm程序的写法,你还是自己在程序中加几个打印就能明白程序的执行过程了