ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: UNARTHUR

[Excel 程序开发] [开_72]一道益智题,试试大家的编程技巧 [已总结]

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-12-26 15:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:
没有时间编写程序,在boszzy老大的基础上加入14个顺序的计算,速度提高50%,但我没有时间看主要程序,所以没有把倒序的部分加入。理论上加入了应当提高一部分速度。

TA的精华主题

TA的得分主题

发表于 2005-12-27 14:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

楼上的有意思 从 2005-12-22 14:58:02 就说没时间做

我也借用一下,哎呀,最近比较忙,看各位的都能看明白,就没时间写,提个思路:用运算速度快的代码,能在楼上的基础上能把速度提高10%

以上玩笑。

说句严肃的:这道题出得实在是好。好就好在有不同的算法。如果一味的穷举出所有答案来检查是否符合要求,所耗的时间多得惊人。如何减少循环和判断的次数是提高速度的根本。

没有写出程序,纸上谈兵,顺带班门弄斧,各位莫怪。[em08]

TA的精华主题

TA的得分主题

发表于 2005-12-28 12:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-1-17 19:54 | 显示全部楼层
好久没有用False了,不过还好啦!模版已经给了,好我第一个顶上!!嘻

TA的精华主题

TA的得分主题

发表于 2013-9-30 09:08 | 显示全部楼层
这题啥意思?
由0_0出发,沿路径遍历所有节点回到出发点,不得重复路过节点?
或则
由0_0出发,遍历所有路径,回到出发点,不得重复经过路径?

题目都不描述清楚,让人猜得吗?

TA的精华主题

TA的得分主题

发表于 2013-9-30 11:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
下载了那个flash才明白,是从图中任意一个节点开始,像中国象棋马的走法走日字格,遍历所有节点且仅走一次并回到起始点,要求找出所有走法。

这题就是一个极其简单的寻找哈密顿回路(Hamiltonian Cycle),建立一个图(Graph)数据结构,顶点是各个节点,边是与其成日字格之间的节点之间的路径。

采用深度优先遍历图中节点,设置好退出机制,很容易就可以遍历查出所以可能的回路。

以下是构建图数据结构的代码:
[code=vb]Type PADDLE_INFO
    Name    As String
    X       As Integer
    Y       As Integer
    Links   As Collection
End Type

Sub GenerateGraph()
    Dim i%, j%, k%, aPads(13) As PADDLE_INFO, nCnt%, sCon$
    nCnt = -1
    For i = 0 To 3
        For j = 0 To 3
            If Not (i = 0 And j = 3) And Not (i = 3 And j = 3) Then
                nCnt = nCnt + 1
                With aPads(nCnt)
                    .Name = i & "_" & j
                    .X = i: .Y = j
                    Set .Links = New Collection
                End With
            End If
        Next
    Next
    For i = 0 To nCnt
        sCon = ""
        For j = 0 To nCnt
            If i <> j Then
                If Abs(aPads(i).X - aPads(j).X) * Abs(aPads(i).Y - aPads(j).Y) = 2 Then
                    aPads(i).Links.Add j
                    sCon = sCon & ", " & aPads(j).Name
                End If
            End If
        Next
        sCon = Right(sCon, Len(sCon) - 2)
        Debug.Print aPads(i).Name & ": " & sCon
    Next
End Sub[/code]

遍历查找的办法当然是递归,14个顶点的图,遍历是非常快得~


补充内容 (2013-10-10 14:43):
这题该给我5分,嘿嘿

TA的精华主题

TA的得分主题

发表于 2013-10-10 13:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TA的精华主题

TA的得分主题

发表于 2016-5-19 15:03 | 显示全部楼层
请参与答题的朋友都能投上一票,好让大家对题目的难度有所了解,谢谢
哪的智商的多少才行啊,我智商低。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-23 14:34 , Processed in 0.044428 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表