采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
拓展切分时, 对newv进行了判断, 找到不属于蓝色切分的端点, 然后将其visited设为true. 这个newv = visited[minEdge.getV()] ? minEdge.getW() : minEdge.getV(); 是否多余呢, 因为好像每次往优先队列里面丢入新的横切边的时候, 新的横切边的初始化方式都是v为true的结点, w为false的结点的呀。
把你认为的,去掉冗余的,完整的 Prim 算法的代码贴一下?
public Prim(WeightedGraph G){ this.G = G; mst = new ArrayList<>(); CC cc = new CC(G); if(cc.count() > 1) return; boolean visited[] = new boolean[G.V()]; visited[0] = true; Queue pq = new PriorityQueue<WeightedEdge>(); for(int w: G.adj(0)) pq.add(new WeightedEdge(0, w, G.getWeight(0, w))); while(!pq.isEmpty()){ WeightedEdge minEdge = (WeightedEdge) pq.remove(); if(visited[minEdge.getV()] && visited[minEdge.getW()]) continue; mst.add(minEdge); int newv = minEdge.getW(); visited[newv] = true; for(int w: G.adj(newv)) if(!visited[w]) pq.add(new WeightedEdge(newv, w, G.getWeight(newv, w))); } }
理解了。可以,没问题的:)
谢谢老师
登录后可查看更多问答,登录/注册
30+小时系统学习,bobo带你克服被图论支配的恐惧
1.4k 10
2.1k 9
2.1k 7
903 7
1.4k 6
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号