У меня были проблемы с этим, потому что прошло много времени с тех пор, как я сделал C:)
То, что вам нужно, - это нечто большее, как показано ниже - обратите внимание, было несколько ошибок, которые я могуне вижу, как это сработало бы.С '0 0' в конце файла и тем фактом, что вы использовали 1-> nv в циклах, никогда не было бы элемента node [0] и, следовательно, всегда бы произошел сбой.
В моем примере я оставляю массив разреженным (выделяя только те узлы, которые действительно существуют), удовлетворяя при этом другим условиям.Мне также все равно, в каком порядке они входят, так что входной файл может быть неупорядоченным.Также обратите внимание, что метод печати может нуждаться в обновлении, если данные файла имели разреженные данные (т. Е. Первое число было 10, и в нем отсутствовало что-либо вроде '9 x').
void initial(int nv)
{
node = (Node **)malloc(maxV * sizeof(Node *));
}
//CREATE ADJACENCY LIST -
void CreateAdjList(void)
{
int v1,v2;
Node *ptr;
while(fscanf(fp,"%d %d",&v1,&v2)!=EOF){
ptr = (Node *)malloc(sizeof(Node));
ptr->vertex = v2;
if (node[v1]==NULL) {
node[v1] = (Node *)malloc(sizeof(Node));
node[v1]->vertex = v1;
node[v1]->next = NULL;
}
Node *next = node[v1];
while (next->next!=NULL)
next = next->next;
next->next = ptr;
//ptr->next = &(*(node[v1])->next); //Problem could be here
//node[v1]->next = ptr;
}
fclose(fp);
}