在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 ++;
}