Ich habe Probleme beim Drucken von Vertices, wenn Adjacency Lists verwendet werden. Ich möchte nur die Anfangscheitelpunkte ohne die Nachbarn erhalten, aber ich bekomme stattdessen ihre Adressen. Also, ich habe ein Problem mit Zeigern. Im Moment verstehe ich nicht, warum die richtige Ausgabe nicht gedruckt wird. Mein Code ist:Adjazenzliste für Graphen in C
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct ADI{
int val;
struct ADI *urm;
}ADI;
ADI *adjancencyList(int vertex)
{
int neigh,i;
ADI *head, *elem, *vec;
head = (ADI*) malloc(sizeof(ADI));
head->val = vertex;
elem = head;
printf("Input number of neighbours:");
scanf("%d", &neigh);
for(i = 0; i < neigh ; i++)
{ printf("Neighbour:");
vec = (ADI*) malloc(sizeof(ADI));
elem->urm = vec;
scanf("%d", &elem->val);
}
return head;
}
int main()
{ int i, n, v;
printf("Input number of vertices ");
scanf("%d", &n);
ADI *A = (ADI*) malloc(n * sizeof(ADI));
for(i = 0; i < n; i++)
{
printf("Input vertex name:");
scanf(" %d ", &v);
A = adjancencyList(v);
A++;
}
A = &(A[0]);
for(i = 0; i < n; i++)
{
printf(" %d ", A->val );
printf(" \n ");
A++;
}
return 0;
}
Bitte geben Sie ein Beispiel für die Eingabe, die erwartete Ausgabe und der tatsächlichen Ausgabe. –
@MichaelWalz: "Großartige Gedanken ..." –
Beachten Sie, dass nachstehende Leerzeichen in 'scanf()' -Familienformatzeichenfolgen diabolisch sind, wenn die Eingabe jemals von einem Benutzer und nicht von einer Datei kommt. Das Grundproblem ist, dass die 'scanf()' Funktion nicht zurückkommt, bis sie auf etwas trifft, das nach der eigentlichen Eingabe kein Leerzeichen ist. –