第七周图论总结

基础

Vector
Vector<int>G[N+1];
G[u].push_back(v);
G[u][v]表示u到v有边

链式前向星

 void add(int u,int v,double w)
 {
 	E[++tot].nxt=head[u],head[u]=tot;
 	E[tot].to=v,E[tot].v=w;
 } 
 for(int x=head[p]; x; x=E[x].nxt)
 	if(d[E[x].to]==0.5)
 	t.v=E[x].v+d[p],t.to=E[x].to,to,h.push(t);
 	
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
M[i][j]=min(M[i][j],M[i][1]+M[1][j]);//经过1的最短路 ,1可以换成2.3.4

floyd

for(k;k<=n;k++)
for(i)//同上 
for(j)//同上 
M[i][j]=min(M[i][j],M[i][k]+M[k][j]);负边权无法解决 

1

DFS改良(DFS-Improve)

1.BFS与DFS
BFS广度优先树。
DFS是多棵树的深度优先森林。
DFS搜索先遍历本顶点,再递归遍历临接的顶点。DFS改良能先递归遍历临接的顶点,再遍历本顶点,并且按遍历顺序逆序存储起来。

代码:

DFS-IMPROVE(v,visited,stack)

visited[v] = true

for i equal to every vertex adjacent to v

if visited[i] == false

  DFS-IMPROVE(i,visited,stack)

end

stack.push(v)

这个改良版DFS有个很有用的性质就是,对于两个顶点A、B,存在A到B的路径,而不存在B到A的路径,则从记录的顺序中取出的时候,一定会先取出顶点A,再取出顶点B。以下为这个性质的证明。

假设:有两个顶点A和B,存在路径从A到B,不存在路径从B到A。

证明:分为两种情况,情况一,先搜索到A顶点,情况二,先搜索到B顶点。对于情况一,由命题可得,A一定存储在B之后,那么取出时先取出的是顶点A。对于情况二,先搜索到B顶点,由于B顶点搜索不到A顶点,则A一定存储在B之后,那么取出时仍先取出的是顶点A,命题得证。
DFS改良性质:对于两个顶点A、B,存在A到B的路径,而不存在B到A的路径,则从记录的顺序中取出的时候,一定会先取出顶点A,再取出顶点B。

另外

这周自学了离散数学图论的内容,然后感觉用处不大。还占用了每天早上早起的时间,很亏。以后早上做题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值