图的基本概念及存储

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45707147/article/details/101934601

国庆七天乐
国庆三天乐
在杨哥的悉心教导下,先学习了图的基本概念。

图的概念

点用边连接起来就做图,graph=(V,E)v代表结点,e代表边
权值w:边的长度,依各题情况而定
连通:从u到v存在一条通路,则称u,v是连通的
回路:起点即是终点的路,又叫环
完全图:任意两个结点都被边直接相连(可用于判断数据范围)
稠密图:边数接近完全图的图
稀疏图:边数远远少于完全图的图
在这里插入图片描述图一
无向图
图一是个无向图,无向图中与结点相连的边的数目叫做结点的度
对于n阶无向完全图,有n(n-1)/2条边
在这里插入图片描述图二
有向图
图二是个有向图,有向图中以该结点为终点的边的数目叫做结点的入度,以该结点为起点的边的数目叫做结点的出度
对于n阶有向完全图,有n(n-1)条边

二维数组存储
int map[max][max];
map[i][j]=当i和j相连时是权值(true),否则是无穷大或小(false)
邻接数组初始化:memset
int型:极大值:memset(map,0x7f,sizeof(map));
极小值:memset(map,0xaf,sizeof(map));
0:memset(map,0,sizeof(map));

邻接表存储
实际上使用链表完成储存,也可用数组模拟
代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct edge{int v,w,next;}e[101];
int head[101],k=1;
int h[101]; 
void addedge(int u,int v,int w)//储存邻接表,u 边的起点,v 边的终点 
{
	e[k].next=head[u];//记录该节点的最后一条边 
	e[k].v =v;//记录这条边的终点 
	e[k].w =w;//记录这条边的权值 
	head[u]=k++;//刷新head[u]的值 
	++h[v];//记录v的入度 
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		addedge(u,v,w);
	}
	
//	int z;
//	cin>>z;
//	int q=head[z];
//	while(q) 
//	{
//		cout<<e[q].v<<" ";
//		q=e[q].next;
//	}
//	输入起始节点 输出该节点的终点 
	return 0;
}

不打了,下晚自习了

猜你喜欢

转载自blog.csdn.net/weixin_45707147/article/details/101934601