Ayrık grafiklerle çalışmam gerekiyor. Ve benim için özel bir prosedür, grafiğin güçlü bir şekilde bağlı bileşenlerini bulmaktır. Bundan sonra eşdeğer düğümleri birleştirmem gerekiyor. Yani, eğer aşağıdaki düğümler varsa: - node1, node2, node3, vs. Sonunda bunlardan birkaçını birleştirebilmem gerekir. Örneğin, node1 bir lider ise, node2, node3 nihayet nod1'e işaret etmelidir. Böylece, eğer node2'ye erişilirse, bunun yerine node1'e erişmeliyiz. (her durumda eşdeğerdir).C++ - Uygula Dereference operatörünün aşırı yüklenmesi ile grafik düğümlerinin birleştirilmesi
Kullandığım kaba bir fikir, her düğümde bir düğüm liderine işaretçi kullanmaktı. Başlangıçta kendisine işaret eder, ancak sonunda bir lidere işaret edebilir. Ve bundan sonra, eğer düğüme erişilirse, lidere ulaşırız. (bu yaklaşım benim istediğim şeye yol açmayabilir, ama ben sadece olasılıkları düşünüyordum). Yani burada
C++ temel bir düğüm yapıdır: - Ben düzgün İstediğimi elde etmek ben KQUEUE operatörünü aşırı gerektiğini bilmek istiyorum: -
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; }
};
Ama aşırı yüklenmesini yapıyorum düşünüyorum yanlış, ben çıkışından beklediğiniz alamadım olarak: -
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();
}
Çıktı: -
ptr1 data :-
1
ptr2 data :-
2
changing Leader for ptr1
ptr1 data :-
1
ptr2 data :-
2