我的马的遍历代码[Teaks & xgluxv]
今天在园子首页上看到一篇 马的遍历 的文章 用来比较了一下c++和c#的代码运行速度的问题。本来这两种语言没有什么可比性,但后边看到文章里提到的出结果的时间 都超出了我的想像。因此用vc++2005和vc#2005分别写了一下相同的算法,各位网友可以把代码下载下去 自行运行比较一下。源代码工程文件
我这里把算法代码列出一下 以c#版本为例:
我这里把算法代码列出一下 以c#版本为例:
1
struct CSPoint
2
{
3
public int x;
4
public int y;
5
}
6
7
class othercsHorse
8
{
9
int[] DeltaX ={ -2, -1, 1, 2, 2, 1, -1, -2 };
10
int[] DeltaY ={ 1, 2, 2, 1, -1, -2, -2, -1 };
11
int[,] Game = new int[12, 12];
12
CSPoint[] csPoint = new CSPoint[64];
13
int step;
14
int ResultCount;
15
16
public othercsHorse()
17
{
18
for (int i = 0; i < 12; i++)
19
{
20
Game[i, 0] = -1;
21
Game[i, 11] = -1;
22
Game[0, i] = -1;
23
Game[11, i] = -1;
24
Game[i, 1] = -1;
25
Game[i, 10] = -1;
26
Game[1, i] = -1;
27
Game[10, i] = -1;
28
}
29
step=0;
30
csPoint[step].x=2;
31
csPoint[step].y=2;
32
Game[csPoint[step].x, csPoint[step].y] = 1;
33
}
34
35
public void OutputResult()
36
{
37
ResultCount++;
38
Console.WriteLine("Result:{0}", ResultCount);
39
for (int i = 2; i < 10; i++)
40
{
41
for (int j = 2; j < 10; j++)
42
{
43
Console.Write("{0}{1} ", (Game[i, j] < 10)?" ":"", Game[i, j].ToString());
44
}
45
46
Console.WriteLine();
47
}
48
Console.WriteLine();
49
}
50
51
public void Start()
52
{
53
int NextX, NextY;
54
for (int i = 0; i < 8; i++)
55
{
56
NextX = csPoint[step].x + DeltaX[i];
57
NextY = csPoint[step].y + DeltaY[i];
58
if (Game[NextX, NextY] == 0)
59
{
60
Game[NextX, NextY] = ++step + 1;
61
csPoint[step].x = NextX;
62
csPoint[step].y = NextY;
63
if (step == 63)
64
{
65
OutputResult();
66
}
67
68
Start();
69
}
70
}
71
72
Game[csPoint[step].x,csPoint[step].y] = 0;
73
--step;
74
}
75
76
}
77

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

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

路漫漫其修远兮 吾将上下而求索
my blog