#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
#define MAX 100
struct ArcNode
{
int adjvex;//臨接的邊序號.
ArcNode *next;//下一個節點
};
struct Vnode
{
int data;//頂點信息
ArcNode *InputLine;//出邊表
ArcNode *OutputLine;//入邊表
};
struct Graph
{
Vnode vertexs[MAX];//頂點數組
int vexnum;//頂點數
int arcnum;//邊數
};
Graph G;
void CreatGraph()
{
int i;
ArcNode *pi;
int v1,v2;
G.vexnum=0;
G.arcnum=0;
printf("please input Graph's vexnum or arcnum.\n");
scanf("%d %d",&G.vexnum,&G.arcnum);
for(i=0;i<G.vexnum;i++)
{
G.vertexs[i].InputLine=G.vertexs[i].OutputLine=NULL;
}
printf("please input partner number like X X by point to point.\n");
for(i=0;i<G.arcnum;i++)
{
scanf("%d %d",&v1,&v2);
v1--,v2--;
//input line
pi=(ArcNode*)malloc(sizeof(struct ArcNode));
pi->adjvex=v2;
pi->next=G.vertexs[v1].InputLine;
G.vertexs[v1].InputLine=pi;
//output line
pi=(ArcNode*)malloc(sizeof(struct ArcNode));
pi->adjvex=v1;
pi->next=G.vertexs[v2].OutputLine;
G.vertexs[v2].OutputLine=pi;
}
}
void DeleteGraph()
{
int i;
ArcNode *pi;
for(i=0;i<G.vexnum;i++)
{
//free input line
pi=G.vertexs[i].InputLine;
while(pi!=NULL)
{
G.vertexs[i].InputLine=pi->next;
free(pi);
pi=G.vertexs[i].InputLine;
}
//free output line
pi=G.vertexs[i].OutputLine;
while(pi!=NULL)
{
G.vertexs[i].OutputLine=pi->next;
free(pi);
pi=G.vertexs[i].OutputLine;
}
}
}
int main()
{
CreatGraph();
int i;
int sum;
ArcNode *pi;
for(i=0;i<G.vexnum;i++)
{
sum=0;
pi=G.vertexs[i].InputLine;
while(pi!=NULL)
{
sum++;
pi=pi->next;
}
printf("%d points Inputline is:%d\n",i+1,sum);
pi=G.vertexs[i].OutputLine;
sum=0;
while(pi!=NULL)
{
sum++;
pi=pi->next;
}
printf("%d points OutputLine is %d\n",i+1,sum);
}
DeleteGraph();
return 0;
}
鄰接表存圖(出邊表+入邊表)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.