You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Queue与Graph类实现演员Kevin Bacon数计算功能

Kevin Bacon数计算需求与已实现基础类

需求说明

  • 目前已实现Queue类与Graph类两个基础工具类

第一部分:实现kevin_bacon_number函数

函数定义如下:

kevin_bacon_number(moviegraph, actor)

功能:计算指定演员在电影图中的Kevin Bacon数。
测试要求:运行以下代码应返回1(因为De Niro, Robert和Kevin Bacon共同出演过同一部电影):

g = Graph('movies.txt', False, '/')
kevin_bacon_number(g, 'De Niro, Robert')

第二部分:实现actors_with_number函数

函数定义如下:

actors_with_number(moviegraph, number)

功能:返回Kevin Bacon数等于指定数值的所有演员列表。
测试要求:

  1. 运行以下代码应返回Bacon, Kevin:
g = Graph('movies.txt', False, '/')
actors_with_number(g, 0)
  1. 'De Niro, Robert' in actors_with_number(g, 1)的判定结果应为True。

已实现基础类代码

Queue类

class Queue:

    #-------------------------------------------------------------------

    # 构造空的Queue对象

    def __init__(self):
        self._first = None  # 指向第一个_Node节点
        self._last = None   # 指向最后一个_Node节点
        self._length = 0    # 元素数量

    #-------------------------------------------------------------------

    # 队列空返回True,否则返回False

    def isEmpty(self):
        return self._first is None

    #-------------------------------------------------------------------

    # 将item添加到队列尾部

    def enqueue(self, item):
        oldLast = self._last
        self._last = _Node(item, None)
        if self.isEmpty():
            self._first = self._last
        else:
            oldLast.next = self._last
        self._length += 1

    #-------------------------------------------------------------------

    # 移除队列头部元素并返回

    def dequeue(self):
        item = self._first.item
        self._first = self._first.next
        if self.isEmpty():
            self._last = None
        self._length -= 1
        return item

    #-------------------------------------------------------------------

    # 返回队列元素数量

    def __len__(self):
        return self._length

    #-------------------------------------------------------------------

    # 返回队列的字符串表示

    def __str__(self):
        s = ''
        cur = self._first
        while cur is not None:
            s += str(cur.item) + ' '
            cur = cur.next
        return s

#----------------------------------------------------------------------

_Node对象包含存储元素的item属性和指向下一个_Node对象的next属性,Queue实例由若干个_Node节点串联组成。

_Node类

class _Node:
    def __init__(self, item, next):
        self.item = item  # 元素引用
        self.next = next  # 下一个_Node对象的引用

Graph类

class Graph:

    # 构造Graph对象,如果传入filename参数,则按指定分隔符读取文件数据填充图
    # 有向图需将directed参数设为True
    def __init__(self,  filename=None, directed=False, delimiter=None):
        self._directed = directed
        self._e = 0
        self._adj = dict()
        if filename is not None:
            f = open(filename, 'r')
            lines = f.read().split('\n')
            for line in lines:
                names = line.split(delimiter)
                for i in range(1, len(names)):
                    self.addEdge(names[0], names[i])
            line = ''
                
    # 向图中添加顶点v和w之间的边
    def addEdge(self, v, w):
        if not self.hasVertex(v): self._adj[v] = set()
        if not self.hasVertex(w): self._adj[w] = set()
        if not self.hasEdge(v, w):
            self._e += 1
            self._adj[v].add(w)
            if not self._directed: self._adj[w].add(v)
            
    # 返回顶点v的所有邻接顶点的可迭代集合
    def adjacentTo(self, v):
        return iter(self._adj[v])
    
    # 返回图中所有顶点的可迭代集合
    def vertices(self):
        return iter(self._adj)

    # 顶点v在图中存在返回True,否则返回False
    def hasVertex(self, v):
        return v in self._adj

    # 边v-w在图中存在返回True,否则返回False
    def hasEdge(self, v, w):
        return w in self._adj[v]
    
    # 返回图中顶点数量
    def countV(self):
        return len(self._adj)
    
    # 返回图中边数量
    def countE(self):
        return self._e
    
    # 返回顶点v的度
    def degree(self, v):
        return len(self._adj[v])

    # 返回图的字符串表示
    def __str__(self):
        s = ''
        for v in self.vertices():
            s += v + '  '
            for w in self.adjacentTo(v):
                s += w + ' '
            s += '\n'
        return s

内容的提问来源于stack exchange,提问作者Zahid Riaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:36:02