定义 1.顶点:数据元素 2.无向图:图中每个顶点间的连线都是无向线 有向图:图中每个顶点间的连线都是有向线 3.边:顶点间的无向线 弧:顶点间的有向线 4.邻接点:一条边上的两个顶点互为邻接点;一条弧上的两个顶点,被指向顶点另一个的邻接点 5.度:一个顶点的关联的边或弧 6.网:带权,也分为无向网和有向网 7.路径:接续的边的端点构成的顶点序列 8.路径长度:路径上边或弧的数目;路径上边或弧的权值和
邻接矩阵
表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn} 。
G的邻接矩阵是一个具有下列性质的n阶方阵:
对无向图而言,邻接矩阵一定是对称的,而且主对角线一定为零;而有向图则不一定,如图
说白了,无向图就是“两个顶点间有边,就是1,没有就是0”
有向图则是“一个顶点往另一个顶点指,就是1,不然就是0”
然而,
网的邻接矩阵只有主对角线所有元素为0,其他要用权值写入,两个没连线的顶点对应的数用一个“大于所有边上权值的数”
void CreateGraph(Graph &G){
int vi, vj, w;
cout << "please enter the number of vertexes and arcs : \n";
cin >> G.numvex >> G.numarc; //输入顶点与边的个数
for(int i = 0; i < G.numvex; i++){ //为每个顶点初始化信息
printf("Please enter the NO.%d name of vex : ",i+1);
cin >> G.vexs[i];
}
for(int i = 0; i < G.numvex; i++){ //初始化顶点之间的权值 默认为无穷
for(int j = 0; j < G.numvex ;j++){
G.arc[i][j] = INF;
}
}
cout << endl;
for(int i = 0; i < G.numarc; i++){ //根据边的条数,为每一条边赋值
cout<< "Enter the subscripts and weights from vertex vi to vertex vj : ";
cin >> vi >> vj >> w;
G.arc[vi][vj] = w; //在无向网中满足图对称性,即Vi-Vj 和Vj-Vi的距离相等,实际就是一条路径
G.arc[vj][vi] = w;
}
}