Hilfe bei Graphencode



  • Hallo,
    Ich habe einen Code zum Graphen erstellen von unserem Professor bekommen und wir arbeiten damit in Zukunft in der Uni allerdings habe ich nich nicht so viel Coding erfahrung bzw. verstehe den Code nicht richtig (also was die verschiedenen Funktionen bewirken) und bin so langsam am verzweifeln. Ich wäre euch ziemlich dankbar wenn mir jemand sagen könnte was die Hauptfunktionen anstellen. Das Thema Graphen habe ich soweit verstanden und ich weiß das eine Adjazenzmatrix erstellt und anschließend gefüllt wird, jedoch sind mir die kleinen Schritte nicht wirklich klar, z.B. finde ich die Funktion nicht wo der Graph befüllt wird oder unter welcher Bedingung eine 1 oder 0 reingeschrieben wird

    Ich bedanke mich schonmal für alle Antworten.

    #include <iostream>
    #include <iomanip>
    #include <cassert>
    
    using namespace std;
    #define MaxEdges 20
    
    struct Graph{
        short int Adj[MaxEdges][MaxEdges];
        int edges;
    };
    
    
    void print_graph(Graph G)
    {
        cout<<"Anzahl der Knoten: "<<G.edges<<endl;
        cout<<" \\ |";
        for (int i=0; i<G.edges;i++)
        {
            cout<<setw(3)<<i<<"|";
        }
        cout<<endl;
        cout<<"----+";
        for (int i=0; i<G.edges; i++)
        {
            cout<<"---+";
        }
        cout<<endl;
        for (int i=0; i<G.edges; i++)
        {
            cout<<setw(3)<<i<<" |";
            for(int j=0;j<G.edges;j++)
            {
                cout<<setw(3)<<G.Adj[i][j]<<"|";
            }
            cout<<endl;
        }
    }
    
    
    Graph generate_ring_of_stars(int r, int s)
    {
        Graph G;
        G.edges=r*(s+1);
        assert(G.edges<=MaxEdges);
    
        for(int i=0;i<G.edges;i++)
        {
            for(int j=0;j<G.edges;j++)
            {
                G.Adj[i][j]=0;
            }
        }
        int l=0;
        for(int k=1; k<r; k++)
        {
            int n=k*(s+1);
            G.Adj[l][n]=1; G.Adj[n][l]=1;
            l=n;
        }
        G.Adj[0][1]=1; G.Adj[1][0]=1;
    
        for (int k=0;k<r;k++)
        {
            l=k*(s+1);
    
            for(int j=1;j<=s;j++)
            {
                G.Adj[l][l+j]=1; G.Adj[l+j][l]=1;
            }
        }
        return G;
    }
    int main()
    {
        Graph G1=generate_ring_of_stars(5,3);
        print_graph(G1);
        return 0;
    }
    
    


  • Der Code zum Erstellen ist komplett in der Funktion generate_ring_of_stars (so wie der Name ja auch aussagt). Dort wird dann mittels mehrerer Schleifen über G.Adj die Adjazenzmatrix gefüllt.



  • @Goleo99 sagte in Hilfe bei Graphencode:

    finde ich die Funktion nicht wo der Graph befüllt wird oder unter welcher Bedingung eine 1 oder 0 reingeschrieben wird

    Hier wird "befüllt"

    @Goleo99 sagte in Hilfe bei Graphencode:

    Graph generate_ring_of_stars(int r, int s)
    {
        Graph G;
        G.edges=r*(s+1);
        assert(G.edges<=MaxEdges);
    
        for(int i=0;i<G.edges;i++)
        {
            for(int j=0;j<G.edges;j++)
            {
                G.Adj[i][j]=0;
            }
        }
        int l=0;
        for(int k=1; k<r; k++)
        {
            int n=k*(s+1);
            G.Adj[l][n]=1; G.Adj[n][l]=1;
            l=n;
        }
        G.Adj[0][1]=1; G.Adj[1][0]=1;
    
        for (int k=0;k<r;k++)
        {
            l=k*(s+1);
    
            for(int j=1;j<=s;j++)
            {
                G.Adj[l][l+j]=1; G.Adj[l+j][l]=1;
            }
        }
        return G;
    }
    
    

    Vlt präzesierst du deine Frage 😉



  • Danke schonmal für die Antworten.

    Ja stimmt habe mich vielleicht nicht präzise ausgedrückt 😅

    Grob verstehe ich das Programm wie gesagt, allerdings verstehe ich die kleinen Schritte nicht wirklich, sprich was passiert in den einzelnen Schleifen in generate_ring_of_stars oder wie wird die Matrix erstellt durch die Schleifen.

    Leider hat unser Professor keine Kommentare hinzugefügt sonst könnte man auch als Anfänger die Schleifen verstehen 😕


Log in to reply