请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

liuyubobobo老师,我想请问一下,关于addEdge函数。

在addEdge函数中,不先判断一下v和w是否相等再进行下面的操作吗?g[v][w]=true;和g[v].push_back(w);中如果v和w相等的话不就相当于添加了自环边了吗?不知道是不是我理解有误。还有为什么要在稠密图中允许添加自环边,而在稀疏图中加上v!=w这句不允许添加自环边呢?先谢谢老师耐心的回答。:) 

SparseGraph类:  


  void addEdge( int v, int w ){


        assert( v >= 0 && v < n );

        assert( w >= 0 && w < n );


        g[v].push_back(w);

        if( v != w && !directed )

            g[w].push_back(v);


        m ++;

    }


DenseGraph类:


    void addEdge( int v , int w ){


        assert( v >= 0 && v < n );

        assert( w >= 0 && w < n );


        if( hasEdge( v , w ) )

            return;


        g[v][w] = true;

        if( !directed )

            g[w][v] = true;


        m ++;

    }

正在回答

插入代码

1回答

方便起见,这个课程的代码中,是允许自环边的。只不过我们的测试用例的图,不包含自环边:)


在SparseGraph中,判断一下v != w,是为了不加入重边。如果v == w,并且我们不判断v != w,我们就会在g[v]这个vector中放入两个v(或者说在g[w]这个vector中放入两个w,因为v == w);


但是在DenseGraph中没有这个问题,因为DenseGraph中g是一个二维数组。g[v][v](或者g[w][w])中只能放一个元素true或者false。如果v == w,赋值g[v][w] = true后再赋值g[w][v] = true,只是把这个位置的元素覆盖一下而已,不会加入重边。


当然在DenseGraph中判断一下v != w,也是完全可以的:)

3 回复 有任何疑惑可以回复我~
  • 提问者 路卍飞 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-02-01 12:54:46
  • 提问者 路卍飞 #2
    非常谢谢liuyubobobo老师!:):):)
    回复 有任何疑惑可以回复我~ 2018-02-01 12:55:34
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号