问题描述
输入1~9之间的数字,就可以做这个数字以下所有数字的全排列。
算法思想
1******:
比如1-5之间数字的全排列,把1放在第一位上,然后后面的数字从小到大排列;
排列好之后开始倒序取两个数字在末尾进行全排列;
从末尾开始取三个数字进行全排列;
从末尾开始取四个数字进行全排列;
。。。。。直到从末尾开始取到第二个数字进行全排列为止。
2*****:同1开头的全排列步骤;
3*****:同1开头的全排列步骤;
。
。
。
最后完成所有的全排列。
C#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 深度优先遍历
{
class Program
{
static int n;
static int[] a = new int[10];
static int[] book = new int[10];
static void Main(string[] args)
{
//深度优先做全排列
Console.WriteLine("请输入n的值(1-9):");
n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("对1-" + n + "之间的数字进行全排列:");
Dfs(1);
Console.ReadKey();
}
public static void Dfs(int step) //1~9数字的全排列
{
if (step == n + 1)
{
for (int i = 1; i <= n; i++)
{
Console.Write(a[i]);
}
Console.WriteLine();
return;
}
for (int i = 1; i <= n; i++)
{
if (book[i] == 0)
{
a[step] = i;
book[i] = 1;
Dfs(step + 1);
book[i] = 0;
}
}
return;
}
}
}
运行结果