图论算法总结

一幅含有V个结点的图是一棵树的条件:1) 有V-1条边且不含有环;2) 有V-1条边且连通;3) 连通,但删除任意一条边都不连通;4) 无环图,但添加任意一条边都会形成环;5) 任意一对顶点间仅存在一条路径。

图的数据结构表示:

1) 邻接矩阵:使用V*V的矩阵,当顶点v和顶点w之间有边相连时,位置(v, w)处值为true

2) 边的数组:使用Edge类,内含有2个int实例变量

3) 邻接表数组:使用以顶点为索引的列表数组,其中每个元素都是和该顶点相邻的顶点列表,即一个链表。

boolean[] marked;
void dfs(Graph G, int v){
    marked[v] = true;
    count ++;
    for(int w : G.adj(v))  //G.adj为顶点v的所有邻接点
        if(!marked[w])
            dfs(G,w);
}

dfs可用于查找图中所有的连通分量及个数

for(int s=0; s<G.V();s++){
    if(!marked[s]){
        dfs(G,s);
        count++;   //一个新的连通分量
    }
}

void dfs(Graph G, int v){
    marked[v] = true;
    id[v] = count;  //每个点所在分量
    for(int w : G.adj(v))
        if(!marked[w])
            dfs(G,w);
}

dfs还可用于解决

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值