0
我必須使用離散圖。對我來說,一個特定的過程是找到圖的強連通分量。之後我必須合併等價節點。也就是說,如果有以下節點: - node1,node2,node3等。最後,我需要能夠合併其中的幾個。例如,如果node1是領導者,那麼node2,node3應該最終指向node1。所以,如果訪問node2,我們應該訪問node1。 (無論如何它們都是等價的)。C++ - 實現使用解引用運算符重載合併圖節點
我有一個大概的想法是使用指向每個節點中的節點首長的指針。最初它指向自己,但最終它可能指向領導者。之後,如果節點被訪問,我們可以訪問領導者。 (這種方法可能不會導致我所需要的,但我只是想着可能性)。
因此,這裏是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