C-數據結構-圖-鄰接表和鄰接矩陣創建和定義

//圖
//定義
const int vnum=20;
typedef struct gp
{
	VertexType vexs[vnum];
	int arcs[vnum][vnum];
	int vexnum,arcnum;//頂點/邊數
}Graph;
//帶權
const int vnum=20;
const int MAX_INT=32768;
typedef struct gp
{
	VertexType vexs[vnum];
	WeightType arcs[vnum][vnum];
	int vexnum,arcnum;//頂點/邊數
}WGraph;

//建立無向帶權圖
void CreatGraph (Graph *g)
{
	int i,j,n,e,w;
	char ch;
	scanf("%d",&n);
	scnnf("%d",&e);
	for (i=0;i<g->vexnum;i++)
	{
		scanf("%c",&ch);
		g->vexs[i]=ch;//輸入頂點信息
	}
	for (i=0;i<g->vexnum;i++)//初始化
		for (j=0;j<g->vexnum;j++)
			g->arcs[i][j]=MAX_INT;
	for (k=0;k<g->arcnum;k++)
	{
		scanf("%d %d %d",&i,&j,&w);
		g->arcs[i][j]=w;
		g->arcs[j][i]=w;//有向圖無此行
	}
}
//鄰接表
//表節點
#define vnum  20
typedef struct arcnode
{
	int adjvex;
	WeightType weight;
	struct arcnode *nextarc;
}ArcNode;
//表頭節點
  typedef struct vexnode
  {
	  int vertex;
	  ArcNode *firstarc;
  }AdjList[vnum];
//圖
typedef struct gp
{
	AdjList adjlist;
	int vexnum,arcnum;
}Graph;
//建立無向帶權圖
CreateAdjlist (Graph *g)
{
	int n,e,i,j,k;
	ArcNode *p;
	scanf ("%d %d",&n,&e);
	g->vexnum=n;
	g->arcnum=e;
	for (i=0;i<n;i++)
	{
		g->adjlist[i].vertex=i;
		g->adjlist[i].firstarc=NULL;
	}
	for (k=0;k<e;k++)
	{
		scanf ("%d %d",&i,&j);
		p=(ArcNode*)malloc(sizeof(ArcNode));
		p->adjvex=j;
		p->nextarc=g->adjlist[i].firstarc;
		g->adjlist[i].firstarc=p;
	}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章