图论入门基础

203 阅读1分钟

定义 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; } }