您的位置:首页 > 编程语言

泛型应用--图的深度(广度)优先遍历.成语接龙例子,含代码下载. (转)

2007-11-15 17:29 579 查看
已知点集合 V={v1,v2,v3...vn}通过边连接起来

深度优先模型:

void Find1(v)

{

while(广度++)

{

Find1(新找到的点);//递归

}

}

可以看出他先把某一分支的第一分支一直搜到底,再搜第2分支的第一。。。。

广度优先模型:

声明全局点集合 R={r0}初始为出发节点。

void Find2(r)

{

while(广度++)

{

R.添加(新找到的点);

}

R.移除(旧的点);

while(新广度++)

{

Find2(r);//递归

}

}

以下边图为例:

1

/ \

2 3

/ \ ¦\

4 5 6 7

深度优先的执行顺序是:

1245367

广度优先是:

1234567

深度优先一般适合查找最长路径。成语接龙例子就是深度优先.

广度优先一般适合查找最短路径或者找到就退出,比较常用。

成语接龙的思路是:

0,分析全部成语,把头尾汉字用Unicode转成数字,再减去short.Maxvalue使其分布在short范围内,以节省内存.如果用string是比较废内存的.

1,利用泛型容器Dictionary查找Key速度是O(1)的哈希散列特点,建立两个字典,一个是全部成语,一个是头索引的多个成语.

2,输入一个成语后点按钮,把尾节点作为头,深度优先搜索.(排除环,检测有环复杂度O(1))

3,每一分钟检查一下是否有更长的龙出现.

代码下载
http://www.dullwolf.cn/Idiom.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: