图的基本概念及存储

mac2022-06-30  25

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

图的概念

点用边连接起来就做图,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; }

不打了,下晚自习了

最新回复(0)