有向图的存储

来源:互联网 发布:联通云数据待遇怎么样 编辑:程序博客网 时间:2024/05/01 20:36

方法一:用邻接表的方法存储,

先开辟一块大小为n的存储空间,每一块存储空间为一个链表的开头,一次将数据增加到相应的链表里。

#include<stdio.h>#include<stdlib.h>typedef struct Node{int data;Node *next;}Node;void show(Node &LJB,int number);int main(){printf("输入顶点数量\n");int number;scanf("%d",&number);printf("请输入连着的顶点a.b,ab同时为0时输入结束\n");int a,b;scanf("%d %d",&a,&b);//创建邻接表Node LJB;LJB.next=(Node *)malloc((number+1)*sizeof(Node));Node *p[number];p[1]=LJB.next;for(int i=1;i<=number;i++){p[i]=LJB.next+i;p[i]->next=NULL;p[i]->data=i;}while(!(a==0&&b==0)){p[a]->next=(Node *)malloc(sizeof(Node));p[a]=p[a]->next;p[a]->data=b;p[a]->next=NULL;scanf("%d %d",&a,&b);} for(int i=1;i<=number;i++){p[i]=LJB.next+i;}int j=1;printf("打印邻接表\n");for(j=1;j<=number;j++){while(p[j]){printf("%d->",p[j]->data);p[j]=p[j]->next;}    printf("\n");    }return 0;}


方法二:用邻接矩阵的方法存储,

开辟一个矩阵,在相接的两个点对应的序号的位置存储为1,其余为0,例如:矩阵a[100][100],1和2相连,则a[1][2]=0


#include<stdio.h>#define size 100 //矩阵大小 void jz(int m[size][size],int a,int b);void show(int m[size][size],int number);int main(){int m[size][size];printf("输入顶点数量\n");int number;scanf("%d",&number);int a,b;printf("请输入连着的顶点a.b,ab同时为0时输入结束\n");scanf("%d %d",&a,&b);while(!(a==0&&b==0)){jz(m,a,b);scanf("%d %d",&a,&b);} show(m,number);return 0;}void jz(int m[size][size],int a,int b){m[a][b]=1;}void show(int m[size][size],int number){int i,j;for(i=1;i<number;i++){for(j=1;j<number;j++){printf("%d ",m[i][j]);}printf("\n");}}


1 0