图的基本概念
图:是由顶点的集合及顶点之间的关系集合(边)组成的一种数据结构。
Graph=(V,E);(V表示顶点,E表示边)两个顶点之间没有方向,称这条边为无向边。组成的图为无向图。
如果任意两个顶点之间都存在边,则称该图为无向完全图。具有n个顶点的无向完全图有n(n-1)/2.
顶点之间有方向,称为有向边,组成的图为有向图。
入度:箭头所指的顶点
出度出箭头的顶点
度数和边数的关系:度数/2=边数。 出度的和=入度的和=边数
权与边有关的数
网带权的图称为网。
序列中顶点不重复的路径称为简单路径。
环第一个顶点到最后一个顶点相同的路径称为环。
连通图对于任意两个顶点有路径,则称为连通图。
连通分量:无向图中的极大连通子图称为连通分量。
强连通图:有向图的连通图。
强联通分量:有向图中的极大强联通子图称做有向图的强联通子图。
**最短路径:**对于网图和非网图而言,最短路径的含义是不同的。
**网图的最短路径:**网图是带权的图,最短路径就是指两顶点之间经过的边上权值之和最少的路径。
非网图的最短路径:就是指两顶点之间经过的边数最少的路径。
采用二维数组的方式创建一个无向图,进行DFS,BFS遍历
C++实现:
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
//定义顶点类型
typedef char VertexType;
//定义权值类型
typedef int EdgeType;
//定义最大顶点数
#define MAXSIZE 100
//定义不确定的值
#define INIFINITY 65535
//创建图的类型
typedef struct Graph
{
//顶点表
VertexType vexs[MAXSIZE];
//临接矩阵表
EdgeType arc[MAXSIZE][MAXSIZE];
//定义顶点数和边数
int numvertex, numdege;
}MGraph;
void CreateGraph(MGraph* G)
{
int i,j,k,w;
cout << "请输入顶点个数和边数:" << endl;
cin >> G->numvertex >> G->numdege;
cout << "输入顶点" << endl;
//初始化顶点表<