/**
 * Ajoute/modifie/efface un noeud de la liste des voisins
 * @param n Le noeud a utiliser
 * @param weight Le poids de la connection (-1 = deconnecte)
 */
void Node::AddConnection(Node &n, int weight)
{
    //on cherche le noeud dans la liste des voisins
    int id = SearchID(n.GetID());
    
    //Si le noeud n'est pas dans la liste des voisins et le poids >= 0
    //On ajoute le noeud dans la liste des voisins ave le poids
    if(id <= -1 && weight > -1)
    {
        linkedNeighbors.push_back(n.GetID());
        linkedWeights.push_back(weight);
        nbNeighbors++;
    }
    //Si le noeud est dans la liste des voisins et le poids est -1 ( deconnecte))
    //On enleve le noeud de la liste des voisins et des poids voisins
    else if(id > -1 && weight <= -1)
    {
        linkedNeighbors.erase(linkedNeighbors.begin()+id);
        linkedWeights.erase(linkedWeights.begin()+id);
        nbNeighbors--;
    }
    
    //Si le noeud est dans la liste des voisins et le poid >=0
    //On ajuste le poids avec le voisins
    else if(id > -1 && weight > -1)
    {
        linkedWeights[id] = weight;
    }
}
Exemple #2
0
void main()
{
    struct student *head,stud,*p;
    printf("Input the students' records:\n");
    head=CreatLink();
    PrintLink(head);
    printf("\nInput the inserted record:");
    scanf("%ld,%f,%s",&stud.num,&stud.score,stud.name);
    head=InsertNode(head,&stud);
    PrintLink(head);
    p=SearchID(head);
    if(p!=NULL)
    {
        printf("\nThe student's record:%ld,%.1f,%s\n",p->num,p->score,p->name);
    }
    DeleteNode(head);
    PrintLink(head);
    DeleteLink(head);
}