Bestimung der Wegematrix!!! -->Hilfe



  • Ich grüße euch!
    Ich bin neu hier und hoffe das Ihr mir weiterhelfen könnt! Ich wäöre sehr dankbar!
    Also es geht um folgendes ich muss eine sog. Wegematrix Programmieren d.h. über die Adjazenzmatrix. Das genze beruht auf die Graphentheorie wie Ihr wisst. Die Adjazenzmatrix habe ich schon programmiert und die Matrixmultipilation ebenfalls für zwei Matrizen. Wenn ich die zwei Adjazenzmatrizen multipliziere dann bekomme ich natürlich A^2! Naja mein Problem jetzt ist das ganz für A^n zu machen d.h. allgemein für endliche MAtrizen d.h. wenn ich in meinem Graphen 4 Knoten habe habe ich die MAtrizen bis A^4!! Wie programmiere ich jetzt meine Schleife damit ich beliebige MAtrizen multipizieren kann?? 😕

    Hier mein Quellcode:

    void main(){
    int n,i,j;
    int *c,*d,*e;

    printf("Anzahl der Knoten: ");
    scanf("%d", &n);

    int *a = adjazenzmatrix(n);
    c = matrix_mult(a,a,n,n,n);

    d = matrix_mult(c,a,n,n,n);
    e = matrix_mult(d,a,n,n,n);

    d = (int 😉 calloc(n*m*o, sizeof(int));

    ausgabe(e,n);
    free(a);
    free(d);
    free(c);
    free(e);

    getchar();
    getchar();

    Die anderen Funktionen habe ich nicht mitreingenommen weil die funktionieren wenn Ihr tipps wie ich das in meiner Main reinabuen kann würde ich mich echt freuen!! Wie ihr sehen könnt habe ich bis A^4 gerechnet zu Fuss sag ich mal wie sieht die Schleife aus 😕



  • Erstens gehört deine Frage wohl eher ins C-Forum.

    Und eine Schleife solltest du doch kennen, wenn du schon mit Adjazenzmatrizen und Multiplikationen werkelst (denn das sind doch intern auch nur Schleifen).

    Aber hier mal der Code für A^n:

    int *a = adjazenzmatrix(n); 
    int *b = a; // hier eigentlich echte Kopie erzeugen (d.h. Speicher anfordern und kopieren)
    
    int i;
    for(int i=0; i<n-1; i++)
    {
      b = matrix_mult(b,a,n,n,n);
    }
    

    wobei ich jetzt die Speicherallokierung und Freigabe mal weggelassen habe...


Anmelden zum Antworten