Ich versuche, durch eine Ghetto-Karte zu navigieren. Ich Eingabe meine Knoten aus einer .txt, die Werte wie folgt hat:Anzahl der Knoten entlang eines Pfades finden
3 -1
2 3 -1
1 -1
0 1 4 6 -1
3 5 7 -1
4 7 8 -1
3 7 -1
4 5 6 8 -1
5 7 -1
10 -1
9 -1
So: 2
- Knoten 0 wird mit dem Knoten 3
- Knoten zu Knoten werden verbunden 1 und 3
- Knoten 2 wird mit dem Knoten 1
und so weiter verbunden sein ... ‚-1‘ wird nur die Leitung zu beenden
Momentan speichere ich sie in einem Array der Größe 11, wo ich gerade getline()
verwendet habe, um jede Zeilennummer in die passende Array-Zelle zu ziehen; Dies wird auf dem Bildschirm ausgegeben. Ich werde sie auch in ein 2D-Array setzen, wo jeder Wert seine eigene Zelle hat. Ich werde den Benutzer nach einem Startknoten und Endknoten fragen, dann werde ich eine rekursive Funktion verwenden, um einen Pfad zwischen den beiden zu berechnen (falls es einen gibt), und ausgeben, wie viele Knoten sich auf diesem Pfad befinden. Ich bin nicht einmal am optimalen Weg interessiert, irgendjemand wird es tun.
Wie würde ich rekursiv darüber gehen? so weit
Der unvollendete Code:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
const int ARRAY_SIZE = 11;
void toString(string network[ARRAY_SIZE]);
int numNodes(string network[], int start, int end);
int main()
{
int start;
int end;
// inputting network into array
string network[ARRAY_SIZE];
ifstream in;
in.open("network.txt");
if (in.is_open())
{
while (!in.eof())
{
for (int i = 0; i < ARRAY_SIZE; i++)
{
getline(in, network[i]);
}
}
}
in.close();
//start of user prompts
cout << "Welcome. " << endl << "Here is the network " << endl << endl;
toString(network);
// the loop for start val
do
{
cout << "Please enter a a starting node number (0-10), enter '-1' to quit" << endl;
cin >> start;
if (start == -1)
return 0;
} while (start < 0 && start > 10);
toString(network);
//loop for end value
do
{
cout << "Please enter an ending node number (0-10), enter '-1' to quit" << endl;
cin >> end;
if (start == -1)
return 0;
} while (end < 0 && end > 10);
//recursive stuffs
return 0;
}
int numNodes(string network[], int start, int end)
{
//unfinished function
int num;
//base case
if (start == end)
{
return 1;
}
//recursion
else
{
}
return num;
}
void toString(string network[ARRAY_SIZE])
{
cout << endl;
for (int i = 0; i < ARRAY_SIZE; i++)
{
cout << network[i] << endl;
}
cout << endl;
}
Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [zum Thema] (http://stackoverflow.com/help/on-topic) und [how to ask] (http://stackoverflow.com/help/how-to-ask) gilt hier. StackOverflow ist kein Design-, Codierungs-, Recherche- oder Lernprogramm. – Prune
Es gibt viele Referenzen für Graph Traversal; Sie haben keinen Code geschrieben, um einen von ihnen zu versuchen. "Wie würde ich das machen?" Ist keine * spezifische * Programmierfrage; es fordert uns auf, den Kern Ihres Programms ohne die gebührende Sorgfalt von Ihnen zu entwerfen. Beginnen Sie mit dem Algorithmus von Dijkstra, machen Sie eine gute Leistung und aktualisieren Sie dann Ihre Frage auf etwas im Bereich von Stack Overflow. – Prune