深度优先

这个家伙好懒,除了文章什么都没留下

0%

【算法】全排列-排队

收同学发来的一个面试题,好久没碰算法方面的题了:

自己推理也不难找出一个答案,写程序就是一个全排列列举所有的可能性,然后去验证是否符合题目要求的

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Program
{
static void Main(string[] args)
{
char[] arr = new char[] { 'A', 'B', 'C', 'D', 'E', 'F' };
func(arr, 0);
Console.ReadLine();
}

private static void func(char[] arr, int k)
{
if (k == arr.Length)
{
if (check(new string(arr)))
Console.WriteLine(new string(arr));
return;
}
else
{
for (int i = k; i < arr.Length; i++)
{
{ char temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; }
func(arr, k + 1);
{ char temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; }
}
}
}

private static bool check(string str)
{
if (str.IndexOf("C") > str.IndexOf("E"))
return false;

if (str.IndexOf("A") < str.IndexOf("F"))
return false;

if (str.IndexOf("E") == 4)
return false;

if (str.IndexOf("B") - str.IndexOf("E") != 1)
return false;

if (Math.Abs(str.IndexOf("D") - str.IndexOf("A")) == 3)
return true;
else
return false;
}
}

答案: