【发布时间】:2016-03-19 19:40:31
【问题描述】:
我必须使用离散图。对我来说,一个特殊的过程是找到图的强连通分量。之后我必须合并等效节点。也就是说,如果有以下节点:- node1、node2、node3 等。最终我需要能够合并其中的一些。例如,如果 node1 是领导者,则 node2、node3 最终应该指向 node1。因此,如果访问 node2,我们应该访问 node1。 (在任何情况下它们都是等价的)。
我的一个粗略想法是在每个节点中使用指向节点领导者的指针。最初它指向自己,但最终它可能指向领导者。之后,如果节点被访问,我们就可以访问领导者。 (这种方法可能无法达到我的要求,但我只是在考虑可能性)。
所以这是 C++ 中的一个基本节点结构:- 我想知道我应该如何正确地重载解引用运算符以获得我想要的:-
class Node{
Node * leader ;
int data;
public:
Node(int x):data(x),leader(this){}
void display(void){std::cout << data << std::endl;}
void setRoot(Node * newLeader){leader = newLeader;}
Node& operator* () { return *leader; }
};
但我认为我做错了重载,因为我没有从输出中得到我所期望的:-
main(){
Node * ptr1 = new Node(1);
Node * ptr2 = new Node(2);
std::cout << "ptr1 data :- " << std::endl ;
ptr1->display();
std::cout << "ptr2 data :- " << std::endl ;
ptr2->display();
std::cout << "changing leader for ptr1" << std::endl;
ptr1->setleader(ptr2);
std::cout << "ptr1 data :- " << std::endl ;
ptr1->display();
std::cout << "ptr2 data :- " << std::endl ;
ptr2->display();
}
输出:-
ptr1 data :-
1
ptr2 data :-
2
changing Leader for ptr1
ptr1 data :-
1
ptr2 data :-
2
【问题讨论】:
标签: c++ graph operator-overloading