隣接リストを使用しているときに頂点の印刷に問題があります。私は隣人なしで始点だけを取得したいが、代わりにそれらのアドレスを取得する。だから、私はポインタに関する問題があります。今、私はなぜそれが正しい出力を印刷していないのか分からない。私のコード: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;
}
入力、予想される出力、および実際の出力の例を提供してください。 –
@MichaelWalz: "Great minds ..." –
'scanf()' -family形式の文字列の末尾のスペースは、ファイルではなくユーザーからの入力である場合には、悪質なものです。基本的な問題は、 'scanf()'関数が実際の入力の後に空白文字でないものを見つけるまで返されないということです。 –