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

已知点集合 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

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/superdullwolf/article/details/2691678
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞