码迷,mamicode.com
首页 > 其他好文 > 详细

离散数学第11章计算机课题第1题

时间:2016-01-17 13:27:23      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

问题: 给定无向简单图的相邻矩阵,确定这个图是不是树

定理1 一个无向图是树当且仅当在它的每对定点之间存在唯一简单通路。

可以给出一个算法:使用广度优先搜索,能够遍历所有节点并且在访问一个节点之后。

后面遍历的到的节点中不再包含这个节点。

算法如下:

数据结构: Mark数组存储节点是否被遍历过的,-1代表没被遍历,1代表已经被遍历 

relationString数组存储 图中包含元素

 

第一步:

找到一个节点做为树根,将它的所有孩子标记为1,

第二步:

以上一步产生的所有孩子为根节点,广度优先搜索这些孩子的节点。如果新访问到的节点已经被访问,则判断此图不是树,

反之标记这些孩子为1。并且重复此过程,直到遍历所有根节点的子孙。

第三步:判断mark数组中是否含有标记为-1的位置,如果有则判断图不是树。

代码如下。

private boolean Judge(String[] relationString, int[][] matrix, int[] mark,int bef, int aft) {
// 找到第一个元素的所有配对 如 <a,b>
   for (int i = 0; i < mark.length; i++) {
           if (matrix[aft][i] == 1) {// 检索到新元素
               if (i == bef) {
           }// 判断是否是已经被检索的边,判断为是就直接跳过就行了
            else if (bef != i) {// 是检索到的新的边
            if (mark[i] == 1) {// 有重边
           return false;
           }
           mark[i] = 1;
        if (!Judge(relationString, matrix, mark, aft, i)) {
        return false;
}
}

}
}
return true;
}

离散数学第11章计算机课题第1题

标签:

原文地址:http://www.cnblogs.com/GUET-edu-cn/p/5137031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!