- Registriert
- Dez. 2009
- Beiträge
- 3.628
Das wäre ja dann das Gleiche wie die C#-Lösung.
Dann kann ich es ja auch etwas anders machen (ist ja auch nicht zu umständlich), außerdem wusste ich ja nicht, ob das mit C genau so geht wie in C#.
Die A*-Algorithmus-Lösung ist jedenfalls schon mal falsch, das hab ich auch gemerkt, denn die F-Werte von Knoten werden nachträglich auch noch mit kleineren F-Werten überschrieben.
Also werde ich es mal von unten nach oben probieren.
EDIT: Ist die Hauptschleife so besser?
Dann kann ich es ja auch etwas anders machen (ist ja auch nicht zu umständlich), außerdem wusste ich ja nicht, ob das mit C genau so geht wie in C#.
Die A*-Algorithmus-Lösung ist jedenfalls schon mal falsch, das hab ich auch gemerkt, denn die F-Werte von Knoten werden nachträglich auch noch mit kleineren F-Werten überschrieben.
Also werde ich es mal von unten nach oben probieren.
EDIT: Ist die Hauptschleife so besser?
Code:
while(/*Kein f-Wert größer als ein abgeschlossener Weg ist*/)
{
/*Fortfahren mit dem Knoten, der den größten F-Wert besitzt
Dazu werden die Array-Positionen des Knotens als Variablen max_z und max_r gespeichert*/
for(int i = 14; i>=0; i--)
{
for(int n = 14; n>=0; n--)
{
if(f[i][n]>max)
{
f[i][n] = max;
max_z = i;
max_r = n;
}
}
}
//Untersuchung des größeren Nachfolgeknotens
if(f[max_z-1][max_r-1]>f[max_z-1][max_r] && max_r > 0)
{
//Wenn der Knoten schon in der Open List ist, darf der F-Wert mit einem anderen kleineren F-Wert übeschrieben werde
if(zahlen_list[max_z-1][max_r-1] != 1 || f[max_z][max_r] - 99 + zahlen[max_z-1][max_r-1] > f[max_z-1][max_r-1])
{
f[max_z-1][max_r-1] = f[max_z][max_r] - 99 + zahlen[max_z-1][max_r-1];
zahlen_list[max_z-1][max_r-1] = 1;
}
}
else
{
if(zahlen_list[max_z-1][max_r] != 1 || f[max_z][max_r] - 99 + zahlen[max_z-1][max_r] > f[max_z-1][max_r])
{
f[max_z-1][max_r] = f[max_z][max_r] - 99 + zahlen[max_z-1][max_r];
zahlen_list[max_z-1][max_r] = 1;
}
}
//Falls beide Nachfolgeknoten untersucht sind, kommt der Knoten auf die Closed List
if(zahlen_list[max_z-1][max_r-1]==1 && zahlen_list[max_z-1][max_r]==1)
zahlen_list[max_z][max_r]=2;
}
scanf("%i", &test);
return 0;
}
Zuletzt bearbeitet: