MIT实验-Social Network

    1. Social Network

构建一个程序,实现人际关系图的表示。具体来说,需要设计出两个类:一个类表示人与人之间的关系网络,需要能够拓展为有向图;另一个类为网络中的节点,表示关系网络中的个体,另外,还需要为设计的人际关系图编写测试用例,以验证程序的正确性。

设计/实现FriendshipGraph

FriendshipGraph类包含三个主要方法:addVertex,addEdge,getDistance

在 FriendshipGraph类中,声明了如下结构,其作用如下:

 

 

addVertex的功能是为关系图添加顶点。首先通过Hashset的不可重复性验证名字是否已经出现过,若是,则打印错误提示信息,并返回false。若不是,则将其添加到节点列表persons中,并更新关系矩阵,与顶点内部的相关数据。

 

 

addEdge的功能是为关系图添加顶点间的边。由于类要保留拓展到有向图的功能,所以每一次运行addEdge都只会添加一条单向边。首先,判断两个参数p1与p2是否都在节点列表persons中,若否,则打印错误提示信息,并返回false。若是,则修改关系矩阵Edge[][]中的对应值。

 

 

getDistance的功能是计算并返回两人间的最短距离。利用了Dijkstra算法贪心算法进行计算,先把下标更小的那个人与下表为1的人互换一下在关系矩阵中的位置,连同这两个人与其他人的关系,即Edge[][]中的相应值。

若i和j没有关系,则将Edge[i][j]与Edge[j][i]设为n+1,即一个对于这个朋友圈来说一个无穷大的两人距离,利用该算法算出v1与朋友圈其他所有人

的最近距离D[n+1],则D[V2]即为所求值。

另外,针对输入的两个person相同/输出参数中有的不在图中,设计了相应的错误提示。

以下是代码的关键部分:

public  int getDistance(Person p1,Person p2)
{
  if(p1.getIndex()==-1||p2.getIndex()==-1)
  {
      System.out.println("其中有人不在关系圈里");
      return -1;
  }

    int i,j,v,v1,v2,temp,w,sum,temp1,temp2;
 if(p1.getIndex()< p2.getIndex())
 {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值