Streckenberechnung -> Problem: Werte aus Schleifen speich

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Streckenberechnung -> Problem: Werte aus Schleifen speich

    Hallo,

    ich habe folgendes Problem:

    In meinem Programm gibt es sechs Orte die nacheinander in beliebiger Reihenfolge abgefahren werden müssen. Insgesamt 120 Möglichkeiten. Herauskommen muss am Ende die kürzeste Strecke in Kilometer sowie die Reihenfolge der besuchten Orte dieser kürzesten Strecke!

    Ich habe das Programm soweit geschrieben das es mir die kürzeste Strecke ausgibt, lediglich die Ortsreihenfolge kann ich nicht ausgeben :(

    Hier der Quellcode:



    Quellcode

    1. public class streckenberechnung {
    2. static double gereistArray[] = new double [120];
    3. static boolean warDa[] = new boolean [6];
    4. static int i,j,k,l,m,o,ort,p,q;
    5. static double[][] entfern = { {0,13,34,31,19,9.5},
    6. {13,0,37,24,32,22},
    7. {34,37,0,61,41,43},
    8. {31,24,61,0,41,28},
    9. {19,32,41,41,0,11},
    10. {9.5,22,43,28,11,0}
    11. };
    12. static double summe = 0;
    13. static int temp = 0;
    14. static double summe2 = 1000;
    15. static double ortArray[] = new double [120];
    16. public static void main(String[] args){
    17. warDa[0] = true;
    18. for (i=0;i<6;i++){
    19. if (warDa[i]== false) {
    20. warDa[i] = true;
    21. //System.out.println("0"+i);
    22. for(j=0;j<6;j++) {
    23. if(warDa[j]==false){
    24. warDa[j]=true;
    25. //System.out.println("0"+i+j);
    26. for (k=0;k<6;k++) {
    27. if(warDa[k]==false){
    28. warDa[k]=true;
    29. //System.out.println("0"+i+j+k);
    30. for (l=0;l<6;l++) {
    31. if(warDa[l]==false){
    32. warDa[l]=true;
    33. //System.out.println("0"+i+j+k+l);
    34. for (m=0;m<6;m++) {
    35. if(warDa[m]==false){
    36. warDa[m]=true;
    37. System.out.println("0"+i+j+k+l+m);
    38. warDa[m]=false;
    39. summe = entfern[0][i]+entfern[i][j]+entfern[j][k]+entfern[k][l]+entfern[l][m]+entfern[m][0];
    40. System.out.println("Kilometer: "+summe);
    41. //Abfrage um die kürzeste Strecke heraus zu finden
    42. gereistArray[temp]=summe;
    43. if (gereistArray[temp]<summe2){
    44. summe2 = gereistArray[temp];
    45. }
    46. ortArray[temp] = entfern[0][i]+entfern[i][j]+entfern[j][k]+entfern[k][l]+entfern[l][m]+entfern[m][0];
    47. temp = temp+1;
    48. }
    49. }
    50. warDa[l]=false;
    51. }
    52. }
    53. warDa[k]=false;
    54. }
    55. }
    56. warDa[j]=false;
    57. }
    58. }
    59. warDa[i]= false;
    60. }
    61. }
    62. System.out.println();
    63. System.out.println("kuerzeste Strecke: "+summe2+" km");
    64. //Versuch den Ort auszugeben bzw. eine Hilfsschleife hierfuer
    65. for (p=0;p<120;p++){
    66. if (ortArray[p] == summe2){
    67. System.out.println("Route: "+ortArray[p]);
    68. }
    69. }
    70. }
    71. }
    Alles anzeigen



    Ich bin fuer jeden noch so kleinen Tipp oder jede noch so kleine Hilfe dankbar :!:

    Vielen Dank schon mal für eure Mühen!
  • den quelltext darf ich nicht verändern, ist uns quasi vom prof so vorgegeben..
    ich versuche es mal anders zu erklären:

    die fünf "for-schleifen" stehen für die route. d.h. vorne steht immer eine "0", dann kommt nach der ersten schleife eine "1", in der nächsten schleife eine "2",... bis als erstes die route "0,1,2,3,4,5" steht. jede zahl markiert einen ort ;)
    und für jede route speicher ich in der variable "summe" den kilometerwert. ich weiß aber nicht wie ich jedesmal zu dem kilometerwert auch die aktuellen werte der schleife speichern kann?!

    bspw.: wenn ich im 12ten durchlauf 151.0 kilometer rausbekomme, dann möchte ich die zugehörige route - in diesem fall 0,2,4,5,3,1 - auch speichern!

    ist das vllt so besser erklärt?

    vielen dank
  • Naja, ich würde sagen, du legst dir ein Array an:

    Quellcode

    1. static int way[] = new int [6];


    In dem Moment wo du die kürzeste Strecke festlegst, setzt du dann die Werte des Arrays.

    Quellcode

    1. summe2 = gereistArray[temp];
    2. way[0] = 0; // Nur, wenn ich richtig liege, und der Ausgangspunkt immer der Ort 0 ist
    3. way[1] = i;
    4. way[2] = j;
    5. way[3] = k;
    6. way[4] = l;
    7. way[5] = m;

    Du überschreibst das also - genau wie summe2 - immer wenn eine kürzere Strecke gefunden wurde.

    Am Ende dann noch ausgeben.

    Mich verwirrt etwas, dass es nur 5 for-Schleifen sind. Das musst du dur nochmal durchdenken.
  • es gibt nur fünf schleifen, da der ausgangspunkt - wie du schon richtig erkannt hast - immer "0" ist. also benötige ich für die weiteren fünf orte nur fünf schleifen. wieso genau ich die "0" nicht weglassen kann, weiß ich allerdings nicht. hat mein prof so vorgegeben :(

    ich probiere mal deine lösungsmöglichkeit einzubinden, ob ich das überhaupt realisieren kann.

    vielen dank schon mal!
  • kein Problem
    Da hättest du aber aus selber drauf kommen können. :twisted:
    Durchdenke nochmal das Programm, ich habe so'n komisches Gefühl wenn ich mir das so anschaue.

    Das booleanarray hat z.B. 6 Werte. Welcher steht dort für den Ausgangsort und warum braucht man für diesen einen booleanwert, da er doch immer zuerst besucht wird? Irgendwas ist da noch faul.