2019年5月18日

总结

出了一点小情况
所以今天这次不写题了
咕咕咕
这次写,emmmm
图论算法

图论算法

先是图
图就是一堆用边连起来的点,图是一种数据结构

分类
有向图:图的边有方向,只能按箭头方向从一点到另一点
无向图:图的边没有方向,可以双向。

还有一些看起来很专业的术语

结点的度:无向图中与结点相连的边的数目,称为结点的度。
结点的入度:在有向图中,以这个结点为终点的有向边的数目。
结点的出度:在有向图中,以这个结点为起点的有向边的数目。
权值:边的“费用”,可以形象地理解为边的长度。
连通:如果图中结点U,V之间存在一条从U通过若干条边、点到达V的通路,则称U、V 是连通的。
回路:起点和终点相同的路径,称为回路,或“环”。
完全图:一个n 阶的完全无向图含有n*(n-1)/2 条边;一个n 阶的完全有向图含有n*(n-1)条边;
稠密图:一个边数接近完全图的图。
稀疏图:一个边数远远少于完全图的图。
强连通分量:有向图中任意两点都连通的最大子图。右图中,1-2-5构成一个强连通分量。特殊地,单个点也算一个强连通分量,所以右图有三个强连通分量:1-2-5,4,3。

图一般用二维数组存储
上一个标准程序段

int i,j,k,e,n;
double g[101][101];
double w;
int main()
{
    int i,j;
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++)
        g[i][j] = 0x7fffffff(赋一个超大值);  //初始化,对于不带权的图g[i][j]=0,表示没有边连通。这里用0x7fffffff代替无穷大。
    cin >> e;
    for (k = 1; k <= e; k++)
    {
         cin >> i >> j >> w;  //读入两个顶点序号及权值
         g[i][j] = w; //对于不带权的图g[i][j]=1
         g[j][i] = w; //无向图的对称性,如果是有向图则不要有这句!
    } 
    …………
    return 0;
}

这就是一个ppt上标准的例子

图的链式储存法(用数组模拟)(这个我没有搞得很明白,不过还是贴上吧)

#include <iostream>
using namespace std;
const int maxn=1001,maxm=100001;
struct Edge
{
	int next;                               //下一条边的编号 
	int to;                                 //这条边到达的点 
	int dis;                                //这条边的长度 
}edge[maxm];

int head[maxn],num_edge,n,m,u,v,d;
void add_edge(int from,int to,int dis)      //加入一条从from到to距离为dis的单向边 
{
	edge[++num_edge].next=head[from];
	edge[num_edge].to=to;
	edge[num_edge].dis=dis;
	head[from]=num_edge;
}

int main()
{
	num_edge=0;
	scanf("%d %d",&n,&m);                    //读入点数和边数
	for(int i=1;i<=m;i++)
	{
	      scanf("%d %d %d",&u,&v,&d);   //u、v之间有一条长度为d的边 
	      add_edge(u,v,d);
	}
	for(int i=head[1];i!=0;i=edge[i].next)   //遍历从点1开始的所有边 
	{
	       //...
	}

	//...
	return 0;
}

图的遍历一般用神搜或者广搜实现。

感慨

昨天有事情忘了没有写,这是今天早起赶出来的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值