版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
国庆七天乐
国庆三天乐
在杨哥的悉心教导下,先学习了图的基本概念。
图的概念
点用边连接起来就做图,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;
}
不打了,下晚自习了