邻接矩阵表示图:
1.图(邻接矩阵)初始化
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;
int Ne;
WeightType G[MaxVertexNum][MaxVertexNum];
};
typedef PtrToGNode MGraph;
typedef int Vertex;
MGraph CreateGraph(int vertexNum)
{
Vertex v,w;
MGraph Graph;
Graph=(MGraph*)malloc(sizeof(struct GNode));
Graph->Nv=vertexNum;
Graph->Ne=0;
for(v=0;v<Graph->Nv;v++)
{
for(w=0;w<Graph->Nv;w++)
{
Graph->G[V][W]=0;
}
}
return Graph;
}
2.插入边
typedef struct ENode *PtrToENode;
struct ENode
{
Vertex V1,V2;
WeightType weight;
}
typedef PtrToENode Edge;
void InsertEdge(MGragh Graph,Edge E)
{
Graph->G[E->V1][E->V2]=E->weight;
if(!有向)
{
Graph->G[E->V2][E->V1]=E->weight;
}
}
3.创建图
MGraph BuildGraph(int Nv,int Ne)
{
MGraph Graph;
Edge E;
Vertex V;
int i;
Graph=CreteaGraph(Nv);
Graph->Ne=Ne;
if(Ne!=0){
E=(Edge)malloc(sizeof(struct ENode));
for(i=0;i<Graph->Ne;i++)
{
scanf("%d %d %d",&E->V1,E->V2,E->weight);
Insert(Graph,E);
}
}
return Graph;
}
4.快速创建邻接矩阵表示的图
int G[MaxN][MaxN],Nv,Ne;
void BuildGraph()
{
int i,j,V1,V2,weight;
scanf("%d",&Nv);
for(i=0;i<Nv;i++)
for(j=0;j<Nv;j++)
G[i][j]=0;
scanf("%d",&Ne);
for(i=0;i<Ne;i++){
scanf("%d %d %d",&V1,&V2,&weight);
G[V1][V2]=w;
if(无向图)
G[V2][V1]=v;
}
}
5.邻接表表示图
type struct VNode{
PtrToAdjVNode FirstEdge;
DtaType data;//存顶点数据
}AdjList[MaxVertexNum]//这个结构体就是用来存储头节点的
typedef struct GNode *PtrToGNode;
strut GNode{
int Nv;
int Ne;
AdjList G;//邻接表数组
} ;
typedef PtrToGNode LGraph;
typedef struct AdjVNode *PtrToAdjVNode ;
struct AdjVNode{
Vertex AdjV;//邻接点的下标
WeightType weight;//权重
PtrToAdjVNode next;//链表指针
}//这个结构体就是用来存储邻接节点信息的
LGraph CreateGraph(int vertexNum)
{
Vertex v,w;
LGraph Graph;
Graph=(LGraph*)malloc(sizeof(struct VNode));
Graph->Nv=vertexNum;
Graph->Ne=0;
for(int v=0;v<Graph->Nv;v++)
Graph->G[v].FirstEdge=NULL;
return Graph;
}
void InsertEdge(Lgraph Graph,Edge E)
{
//插入边《V1,V2》
//给V2建立新的邻接点
PtrToAdjVNode NewNode;
NewNode->(PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
NewNode->AdjV=E->V2;
NewNode->weight=E->weight;
NewNode->next=Graph->G[E->V1].FirstEdge;
Graph->G[E->V1].FirstEdge=NewNode ;
//如果是无向图
PtrToAdjVNode NewNode;
NewNode->(PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
NewNode->AdjV=E->V1;
NewNode->weight=E->weight;
NewNode->next=Graph->G[E->V2].FirstEdge;
Graph->G[E->V2].FirstEdge=NewNode ;
}