Data structure-11 figure (storage)

图:G=(V,E)
V:顶点	要求有穷非空			E:边 要求有穷

完全图;任意两个电都有一条边相连 
无向完全图:n*(n-1)/2条边
有向完全图:n*(n-1)条边 

网:边带权的图
邻接:有边相连的两个顶点的关系
顶点度:与该顶点关联的边的度数

当前的有向图中只有一个顶点的入度为0,
其余顶点的入度均为1,此时是啥形状?
有向树

连通图:若对图G任何两个顶点都存在从v到u的路径,则称G是连通图 

连通分量:
无向图G的极大连通子图称为G的连通分量 

顶点表+邻接矩阵 
无向图
对角线为0,关于对角线对称
顶点i的度 = 第i行(列)中1的个数
完全图的邻接矩阵,对角线为0,其余为1 

Insert picture description here

有向图
可能不是对称矩阵
行出 列入 
度 =+

Insert picture description here

网邻接矩阵 

Insert picture description here

邻接矩阵存储表示:用两个数组分别存储顶点表和邻接矩阵 
#define MaxInt 32767		    //无穷大 
#define MVNum 100;				//最大顶点数 
typedef char VerTexType; 		//设顶点的数据类型为字符型 
typedef int ArcType;			//假设边的权值类型为整形 

typedef struct{
    
    
	VerTexType vexs[MVNum];		//顶点表 
	ArcType arcs[MVNum][MVNum]; //邻接矩阵
	int vexnum,arcnum;			//图当前点数和边数 
}AMGraph; 

以无向网为例

Insert picture description here

Status CreatUDN(AMGraph &G){
    
    
	cin>>G.vexnum>>G.arcnum;	//输入总顶点数,总边数 
	
	for(i = 0; i<G.vexnum; ++i)
		cin>>G.vexs[i];			//依次输入点的信息 
		
	for(i = 0; i<G.vexnum; ++i)	//初始化邻接矩阵 
		for(i = 0; i<G.vexnum; ++i)
			G.arcs[i][j] = MaxInt; 	//边的权值为极大值
	
	for(k = 0; k<G.arcnum; ++k){
    
    
		cin>>v1>>v2>>w;				//输入一条边所依附的顶点及边的权值 
		i = LocateVex(G,v1);
		j = LocateVex(G,v2);		//确定v1和v2在G中的位置
		
		G.arcs[i][j] = w;			//边<v1,v2>的权值设为w 
		G.arcs[j][i] = w;			//对称 
	}//for 
	
	return OK; 
}//CreatUDN 

int LocateVex(AMGraph G, VertexType u){
    
    
	//图G中查找顶点u,存在则返回顶点表中的下标,否则返回-1 
	int i;
	for(i = o; i<G.vexnum; ++i) 
		if(u == G.vexs[i])	return i;
	return -1;
}
***************************************
无向图:
初始化时,w = 0; 
构造邻接矩阵时,w = 1; 

有向网:
非对称矩阵
仅为G.arcs[i][j]赋值,不要ji也赋值

有向图:无向图+有向网
邻接表表示法

Insert picture description here
Insert picture description here
Insert picture description here
Insert picture description here

Guess you like

Origin blog.csdn.net/fly_ship/article/details/110309210