我的马的遍历代码[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

浙公网安备 33010602011771号