我的马的遍历代码[Teaks & xgluxv]

今天在园子首页上看到一篇 马的遍历 的文章 用来比较了一下c++和c#的代码运行速度的问题。本来这两种语言没有什么可比性,但后边看到文章里提到的出结果的时间 都超出了我的想像。因此用vc++2005和vc#2005分别写了一下相同的算法,各位网友可以把代码下载下去 自行运行比较一下。源代码工程文件
我这里把算法代码列出一下 以c#版本为例:
 1    struct CSPoint
 2    {
 3        public int x;
 4        public int y;
 5    }

 6
 7    class othercsHorse
 8    {
 9        int[] DeltaX =-2-11221-1-2 };
10        int[] DeltaY =1221-1-2-2-1 };
11        int[,] Game = new int[1212];
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

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

posted @ 2006-03-09 00:30 .Live 阅读(1520) 评论(14)  编辑 收藏 网摘 所属分类: 程序算法和技巧

  回复  引用  查看    
#1楼 2006-03-09 08:21 | 81      
请问下,8*8的棋盘花了多长时间?
  回复  引用    
#2楼 2006-03-09 09:05 | GoKu [未注册用户]
2.0 的运行不了,楼主说一下结果吧
  回复  引用  查看    
#3楼 [楼主]2006-03-09 09:14 | .Live      
@GoKu,@81 :我的程序只是尽可能的输出所有有效的结果,由于没有做优化所有对称的结果也会全部列出来。如果单说输出一个结果 c++和c#都是瞬间出结果的,而如果要输出全部结果 时间可能比较长 也能觉察出速度的优劣了。--xgluxv
  回复  引用    
#4楼 2006-03-09 10:12 | Jemmy [未注册用户]
不明白楼上什么意思。 难道你以为vc2005开发出来的不是C++程序
  回复  引用  查看    
#5楼 [楼主]2006-03-09 10:27 | .Live      
@fuyude.net:我是用vc++2005里的win32控制台程序项目,没有CLR支持。
  回复  引用  查看    
#6楼 2006-03-09 10:30 | 闪电猪      
c#和c++速度到底差多少?
有10倍么?
  回复  引用  查看    
#7楼 2006-03-09 10:39 | 81      
有空把你的算法好好学习一下。
请问一下,你有没有用铅笔在纸上画个棋盘,每一步试一下,验证一下结果是否正确?
  回复  引用  查看    
#8楼 [楼主]2006-03-09 11:21 | .Live      
@81
你可以把输出结果写到文件里然后按照上面的数字一步一步走走看。
我挑选了几个结果验证了一下,至少我验证的都是正确的。

-- Teaks
  回复  引用  查看    
#9楼 2006-03-09 12:43 | 81      
另一个影响出结果速度的因素是开始的位置,有可能有的开始位置遍历完所有路径而无解。
  回复  引用    
#10楼 2006-03-09 18:47 | GoKu [未注册用户]
回家试了一下,可以明显感觉出C++输出结果比较快,但是也不会快几倍那么多
  回复  引用  查看    
#11楼 2006-03-09 18:53 | A.Z      
请注意clr的数组边界检查,C++肯定比C#快,但是不会超出很多。C#有运行时的优势,C++有native的优势,本质上还是在比较两者的编译器。请都设置代码优化用ngen后,多次累算平均。我家没有fw2.0要不我就测测了。
【问题】 马的遍历
问题描述:在8×8方格的棋盘上,从任意指定的方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径。
马在某个方格,可以在一步内到达的不同位置最多有8个。



  回复  引用  查看    
#12楼 [楼主]2006-03-09 21:18 | .Live      
过些时候 应该会出个能测试性能的版本的 谢谢
  回复  引用  查看    
#13楼 2006-03-09 23:00 | 闪电猪      
我测试过些简单的程序,数组存取和整数运算(1:1)
c#用的时间是c++的3倍
  回复  引用  查看    
#14楼 2006-03-10 12:06 | SharKoo      
大家有没有考虑过输出结果用的时间。。。。。。
真的要比的话,可以考虑直接输出最终的数量、时间。




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-03-09 00:42 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: