实验1 P3中用list表示无向图,这里记录下,一些用法。
在spec中要求You may assume that each person has a unique name. 所以在addVertex方法中我们应该对输入的Person.name进行比较,可以用到List get()和equals()方法
package P3;
import java.util.*;
public class FriendshipGraph {
private List<Person> persons= new ArrayList<Person>();
public void addVertex(Person person) {
boolean flag = true; //是否跟之前添加到List中的人有姓名重复的
for(int i=0; i<persons.size(); i++) {
if(persons.get(i).getPersonName().equals(person.getPersonName())) {
flag = false;
}
}
if(flag) {
persons.add(person);
} else {
System.out.println("错误:姓名重复!");
System.exit(0);
}
}
这里用get()方法获得指向第i个元素的指引并返回了第i个元素的name,通过equals()与输入的person进行对比,如果相等equals()返回true,进入if语句。
之后的方法addEdge
public void addEdge(Person person1, Person person2) {
if (!persons.contains(person1) || !persons.contains(person2)) {
System.out.println("不存在该人,请先在图中添加");
System.exit(0);
}
person1.friends.add(person2);
}
contains()是判断列表中是否存在某元素。我们可以用add()向列表中添加元素。
getDistance()我创建了一个队列queue,把第一个输入的addEdge()方法中的friends List放到队列中,分别进行初值。用到了入队q.offer()和出队:q.poll()。