입력의 첫 번째 행을 총 정점 수로 입력 파일에 대한 인접 행렬을 성공적으로 작성했으며 다음 행은 정점 쌍으로 임의의 순서로 가장자리입니다. 예를 들어인접성 매트릭스에서 인접성 목록을 작성하는 방법은 무엇입니까?
file.txt를
7
1 2
4 6
4 3
5 2
그러나 나는이 프로그램을 실행하면, 인접성 매트릭스가 성공적으로 내장되어 있습니다,하지만 난 구조체 나무의 배열과 같은 인접리스트를 만들려고 프로그램 Seg 결함 (코어 덤프). 프로그램이 실패한 이유에 대한 단서가 있습니까? 문제의 기능은 다음과 같습니다
tree * buildAdjList(int a[][100], int n)
{ int i, j, k;
tree *node;
tree * adjArray[n];
for(i=0; i<=n; i++)
adjArray[i] = NULL;
for(j=0; j<=n; j++)
for(k=0; k<=n; k++)
if(a[j][k] == 1){
node = (tree *)malloc(sizeof(tree));
node->val = k;
node->next = adjArray[j];
adjArray[j] = node;
}
return adjArray[0];
}
프로그램의 나머지 :
일체의 도움을 많이 감사합니다#include <stdio.h>
#include <stdlib.h>
struct tree{
int val;
struct tree *next;
};
typedef struct tree tree;
void printArray(int a[][100],int n);
void adjacencyMatrix(int a[][100], int n, int p1, int p2, FILE * inputF);
tree * buildAdjList(int a[][100], int n);
void printAdjArray(tree * adjArr[], int n);
int main(int argc, char ** argv)
{
int a[100][100];
int n,*q;
FILE * inputFile;
int entries, i;
inputFile = fopen(argv[1], "r");
int p1, p2 =0;
if(inputFile==NULL){
printf("File failed to open.");
exit(EXIT_FAILURE);
}
fscanf(inputFile, "%d", &entries);
tree * adjarray[entries];
q = (int *)malloc(sizeof(int)*n);
adjacencyMatrix(a,entries,p1,p2,inputFile);
adjarray[0] = buildAdjList(a, entries);
printAdjArray(adjarray, entries);
return 0;
}
void adjacencyMatrix(int a[][100], int n, int p1, int p2, FILE * inputF){
int i,j;
do{
for(i = 0;i <= n; i++)
{
for(j = 0;j <=n; j++)
{ if(i==p1 && j == p2){
a[i][j] = 1;
a[j][i] = 1;
}
}
a[i][i] = 0;
}
}while(fscanf(inputF, "%d %d", &p1, &p2) !=EOF);
printArray(a,n);
}
: