Gelöst: Vektoren Kantenliste in Knotenliste
Verfasst: Mo Feb 01, 2010 5:18 pm
Hallo zusammen,
ich hätte da mal wieder gern ein Problem:
Das Dingen soll mir aus einer Kantenliste eine Knotenliste zaubern... das tut es auch NUR:
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?
also exakt an dieser Stelle überliest mir das gute Programm die Bedingungen bzw sieht die als nicht erfüllt an.
*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
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