高速な実装
唯一の迅速な関係チャートを実現する場合は、直接隣接行列を使用することは非常に簡単に達成することになります。
#include <stdio.h>
#define MAXVEX //顶点数目
int main()
{
//定义二维数组表示的图
int Graph[MAXVEX][MAXVEX];
int vex1,vex2,weight;
//初始化图
for(int i = 0;i < MAXVEX;i++)
for (int j = 0; i < MAXVEX; j++)
Graph[i][j] = 0;
//依次读入两顶点和权重信息
while(scanf("%d %d %d",&vex1,&vex2,&weight))
Graph[vex1][vex2] = weight;
return 0;
}
これまでのところ、それはすぐにグラフを作成して完成しました。
利点:そのようなAの構造は、図を有するように順次記憶の応用。ランダムアクセス利点は、迅速に関係が対応する重みの値または頂点のいずれかの間の既知の関係との間に存在するかどうかを決定することができ、Oの時間複雑度(1)。
短所:あなたがしたい場合は、この順序記憶の構造は、限定されています増幅頂点、元の配列は、他の2次元配列の大きな必要性を開くために、この時点での必要性、および新しい配列、このような操作に、元の配列に格納された値をコピーする権利を満たしていません。Oの時の複雑さ(N- 2)。また、恒久的にオープンスペースは、未使用をもたらすことができますスペースの無駄。
抽象表現
実用上、使用の利便性の場合には、そのような関係の必要図の構成は、直接図と同様に構築することができる場合。このように、図のパッケージの抽象データ構造を定義し、その後のであれば、次のことを考慮する必要があります。二段階プロセスは、まず、初期設定の頂点、及び第二に、情報が側面に書き込まれます。
#include <stdlib.h>
#define MAXVEX //最大顶点数
//定义图类型
typedef struct {
int Numofvex;
int Numofedge;
WeightType G[MAXVEX][MAXVEX];
}GNode,* MGraph;
//定义存放边信息的Edge类型便于插入边操作
typedef struct _Edge
{
Vertex v1,v2;
WeightType weight;
}* Edge;
//创建图并初始化,建立顶点
MGraph CreateGraph(int vexnum)
{
//创建图变量,并为此类型开辟一块空间
MGraph Graph;
Graph = (MGraph) malloc (sizeof(GNode));
Graph->Numofvex = vexnum;
Graph->Numofedge = 0;
//初始化图,i,j表示顶点编号,此处从1开始
for (int i = 0; i < Graph->Numofvex; ++i)
for (int j = 0; j < Graph->Numofvex; ++j)
Graph->G[i][j] = 0;
return Graph;
}
//完善边信息
void InserEdge(MGraph Graph, Edge E)
{
//插入边信息
Graph->G[E->v1][E->v2] = E->weight;
}
概要
これらはまた、他の動作を改善することができる第二の補助形態を包装するための方法を示す隣接関係図を用いて基本的なマトリックスです。
長所:ランダムアクセス、クエリ迅速かつ簡単;
短所:トラブル追加や削除、スペースを無駄にすることができます。