如何读取包含边缘列表的文件并输出邻接列表?

问题描述

我应该读取一个包含图形边缘的文件,并打印出相应的邻接表。我认为问题与我的主函数的while循环有关,该循环应该遍历文件的每一行并将两个数字发送到我的函数中以创建邻接表,但是我不确定。 该文件如下所示:

1 2
2 3
3 1
4 1
2 4
4 3

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int max;
typedef struct Node
{
    int vertexnum;
    struct Node *next;   
}Node;

typedef struct List
{
    Node *head; 
}List;
List *adjlist[]={0};

void list(int s,int d)
{
    Node *dest,*temp,*src;
    if(adjlist[s]->head==NULL)
        {
            src=(Node *)malloc(sizeof(Node));
            src->vertexnum=s;
            src->next=NULL;
            adjlist[s]->head=src;
        }
    dest=(Node *)malloc(sizeof(Node));
    dest->vertexnum=d;
    dest->next=NULL;
    temp=adjlist[s]->head;

    while(temp->next!=NULL)
        {
            temp=temp->next;
        }
    temp->next=dest;
}
void print()
{
    int i;
    for(i=0;i<4;i++)
        {
            Node *p=adjlist[i]->head;
            printf("Adj List for vertex %d\n",i+1);

            while(p)
                {
                    printf("%d ",p->vertexnum);
                    p=p->next;
                }
            printf("\n");
        }
}


int main(void)
{
    FILE*fp;
    fp=fopen("numbers.txt","r");
    if(fp==NULL)
        {
            printf("Could not open file!\n");
        }
    int i;
    for(i=0;i<4;i++)
        {
            adjlist[i]=(List*)malloc(sizeof(List));
            adjlist[i]->head=NULL;
        }
    int x,y;
    while(!feof(fp))
        {
            fscanf(fp,"%d %d\n",&x,&y);
            list(x,y);

        }
    fclose(fp);
    fp=NULL;
    print();
    return 1;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)