本文主要是介绍软件构造实验2 Poetic Walks,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
软件构造实验2 Poetic Walks
题目的2.1的要求
我们需要实现一个抽象数据类型图,需要完成图的一系列方法。
整体的实验过程就不细说了,主要讲一个里面需要实现的方法。
set
/**
* Add, change, or remove a weighted directed edge in this graph.
* If weight is nonzero, add an edge or update the weight of that edge;
* vertices with the given labels are added to the graph if they do not
* already exist.
* If weight is zero, remove the edge if it exists (the graph is not
* otherwise modified).
*
* @param source label of the source vertex
* @param target label of the target vertex
* @param weight nonnegative weight of the edge
* @return the previous weight of the edge, or zero if there was no such
* edge,返回-1如果输入的权值是负数.
*/
规约是这样的,总之就是weight是0则删除边;
大于0则设置边或更新权重(如果点还没在点集里需要使点增加到点集)(返回之前的权重,如果之前没有就返回0);
小于零则报错。
@Override public int set(L source, L target, int weight) {//throw new RuntimeException("not implemented");if(weight<0) {System.out.println("权值不能是负数");checkRep();return -1;}else if (weight > 0) {//添加或更新Iterator<Edge<L>> iterator1 =edges.iterator();while(iterator1.hasNext()) {Edge<L> tmp=iterator1.next();if(tmp.getsource().equals(source) && tmp.gettarget().equals(target)) {int pre=tmp.getweight();iterator1.remove();Edge<L> newone = new Edge<L>(source,target,weight);edges.add(newone);checkRep();return pre;}}vertices.add(target);vertices.add(source);Edge<L> newone = new Edge<L>(source,target,weight);edges.add(newone);checkRep();return 0;}else {//weight为0int pre = 0;Iterator<Edge<L>> iterator1 =edges.iterator();while(iterator1.hasNext()) {Edge<L> tmp=iterator1.next();if(tmp.getsource().equals(source) && tmp.gettarget().equals(target)) {pre=tmp.getweight();iterator1.remove();break;}}checkRep();return pre;}}
我的代码也是基于这三种情况进行考虑的。
注意就是用equals去进行等值比较。
这篇关于软件构造实验2 Poetic Walks的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!