ich hätte da mal wieder gern ein Problem:
Code: Alles auswählen
vector<int> getNodeList(vector<int> EdgeList)
{
vector<int> Nodes;
vector<int> NodeList;
vector<int> zahlenspeicher;
int counter;
int z = (int)EdgeList[1]*2;
NodeList.push_back(EdgeList[0]);
NodeList.push_back(EdgeList[1]);
for(int i = 2; i < (int)EdgeList.size(); i++)
{
int j = 0;
bool insert = true;
while(j < (int)Nodes.size())
{
if(Nodes.size() != 0)
{
if(Nodes[j] == EdgeList[i])
{
insert = false;
break;
}
j++;
}
}
if(insert)
{
Nodes.push_back(EdgeList[i]);
}
}
for(int i = 0; i < Nodes.size() ; i++) //Führe für jeden Knoten folgende Aktion aus
{
counter = 0; //Zähler auf 0
for(int j = 2; j < z; j+=2)
{
if(EdgeList[j] == Nodes[i] || EdgeList[j+1] == Nodes[i])
{
counter++; //Zähler wieviele Kanten von einem Knoten abgehen
if(EdgeList[j]!=Nodes[i]) //speichere den Folgeknoten in extra Speicher
zahlenspeicher.push_back(EdgeList[j]);
else if(EdgeList[j+1]!=Nodes[i])
zahlenspeicher.push_back(EdgeList[j+1]);
}
}
if(counter != 0)
{
NodeList.push_back(counter); //Schreibe Anzahl der Folgeknoten in Knotenliste
for(int z = 0; z < zahlenspeicher.size(); z++)
{
NodeList.push_back(zahlenspeicher[z]); //Schreibe Folgeknoten in Knotenliste
}
while(zahlenspeicher.size() != 0) //Leere Speicher
zahlenspeicher.pop_back();
}
}
return NodeList;
};
meine Bedingungen greifen nicht, wenn die letzten 2 Stellen des Vektors <EdgeList> erreicht sind. Mit anderen Worten, meine Knotenliste wird falsch, da die letzten 2 Werte im Vektor einfach überlesen werden. Hat jemand eine Idee woran das liegen könnte?
Code: Alles auswählen
if(EdgeList[j] == Nodes[i] || EdgeList[j+1] == Nodes[i])
*kleine Ergänzung*
Zur Verbildlichung:
sei z = 14;
dann funktionieren die Bedingungen einwandfrei bis zu EdgeList[12] bzw EdgeList[12 + 1]
bei EdgeList[14] bzw EdgeList[14 + 1] wird alles verdrängt, was eigentlich stimmen müsste...
viele Grüße,
Sukka