邻接矩阵实现(快速建立方式)
#include<stdio.h>
#define MaxVertexNum 20
int main()
{
int G[MaxVertexNum][MaxVertexNum];
int Nv,Ne,GData[MaxVertexNum],i,j;
int v1,v2,w;
printf("请输入结点数和边数:\n");
scanf("%d %d",&Nv,&Ne);
printf("请输入结点信息:\n");
for(i=0;i<Nv;i++)
{
scanf("%d",&GData[i]);
}
for(i=0;i<Nv;i++)
{
for(j=0;j<Nv;j++)
{
G[i][j]=0;
}
}
printf("请输入边的信息:\n");
for(i=0;i<Ne;i++)
{
scanf("%d %d %d",&v1,&v2,&w);
G[v1][v2]=w;
G[v2][v1]=w;
}
printf("图的结点信息以及权重信息为:\n");
for(i=0;i<Nv;i++)
{
printf("%d ",GData[i]);
}
printf("\n");
for(i=0;i<Nv;i++)
{
for(j=0;j<Nv;j++)
{
printf("%d ",G[i][j]);
}
printf("\n");
}
}
邻接矩阵用结构体封装(通用性较强)
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MaxVertexNum 20
typedef int WeightType;
typedef int VertexType;
typedef int Status;
typedef struct GNode *PtrToGNode;
typedef PtrToGNode MGraph;
typedef struct ENode *PtrToEdge;
typedef PtrToEdge Edge;
struct GNode
{
int Nv;
int Ne;
WeightType G[MaxVertexNum][MaxVertexNum];
VertexType Data[MaxVertexNum];
};
struct ENode
{
VertexType V1,V2;
WeightType Weight;
};
MGraph CreateGraph(int VertexNum)
{
MGraph Graph;
Graph=(MGraph)malloc(sizeof(struct GNode));
Graph->Nv=VertexNum;
Graph->Ne=0;
for(int i=0;i<Graph->Nv;i++)
{
for(int j=0;j<Graph->Nv;j++)
{
Graph->G[i][j]=0;
}
}
printf("请输入结点信息:");
for(int i=0;i<Graph->Nv;i++)
{
scanf("%d",&Graph->Data[i]);
}
return Graph;
}
void CreateEdge(MGraph Graph,int EdgeNum)
{
PtrToEdge E;
Graph->Ne=EdgeNum;
E=(Edge)malloc(sizeof(struct ENode));
printf("请输入边的信息:");
for(int i=0;i<Graph->Ne;i++)
{
scanf("%d %d %d",&E->V1,&E->V2,&E->Weight);
Graph->G[E->V1][E->V2]=E->Weight;
Graph->G[E->V2][E->V1]=E->Weight;
}
}
void Print(MGraph Graph)
{
int i,j;
printf("当前结点信息为:");
for(i=0;i<Graph->Nv;i++)
{
printf("%d ",Graph->Data[i]);
}
printf("\n");
printf("权重信息为: \n");
for(i=0;i<Graph->Nv;i++)
{
printf("%-16s"," ");
for(j=0;j<Graph->Nv;j++)
{
printf("%d ",Graph->G[i][j]);
}
printf("\n");
}
}
int main()
{
MGraph Graph;
int Nv,Ne;
printf("请输入结点树与边数");
scanf("%d %d",&Nv,&Ne);
Graph=CreateGraph(Nv);
CreateEdge(Graph,Ne);
Print(Graph);
}