《数据结构与算法分析python版》第十二周编程作业

《数据结构与算法分析python版》第十二周编程作业

1、先修课

题目内容:
有 n 门课程要选,其编号分别由 0 至 n-1

每个课程都有一些需要提前学完的先修课程:例如,假设在学习课程 0 前需要先学习课程 1 ,我们用一个先修关系对[0, 1]来表示这种 “后学习课程,先修课程” 的关系

现给定一系列课程与若干先修关系,请判断是否存在一个方案可以学完所有课程
输入格式:
输入分为两行,第一行为一个整数,表示课程的总数

第二行为一个嵌套列表的Python表达式,包含若干先修关系对
输出格式:
True或False,表示是否存在一个按照先修关系学完所有课程的顺序
输入样例
2

[[1,0],[0,1]]
输出样例:
False

脚本

def canfinish(lst,n):
    
    #建立课程规则表
    after = [[] for i in range(n)]
    before = [[] for i in range(n)]
    q = []
    for item in lst:
        before[item[0]].append(item[1])
        after[item[1]].append(item[0])
    for i in range(n):
        if len(before[i]) == 0:
            q.append(i)
            
    # 寻找下一门可选课程
    for circ in q:
        for a in after[circ]:
            q.append(a)
            for b in before[a]:
                if b not in q:
                    q.pop()
                    break
     # 判断结束条件
        if len(q) == n:  
            return True
        else:
            return False


n = int(input())
lst = eval(input())
print(canfinish(lst,n))

2、联网的服务器

题目内容:
给定一个二维列表表示的地图,其中每个位置值为 1 或 0 ;1 代表该位置存在一个服务器,0 代表该位置为空。对每个服务器来说,如果其所在的位置同一行或同一列有其它服务器,就称这个服务器是“联网”的。

请求出地图上所有联网的服务器的总数。
输入格式:
一行,为一个以合法Python表达式给出的二维嵌套列表
输出格式:
一行整数
输入样例
[[1,1,0,0],[0,0,1,0],[0,0,1,0],[0,0,0,1]]
输出样例:
4
脚本

def sitecount(lst):
    count = 0

    
    def isinnet(i,j):
        vlst = [lst_[j] for lst_ in lst] 
        if sum(lst[i])> 1 or sum(vlst)>1:
            return 1
        else:
            return 0
    
    for i in range(len(lst)):
        for j in range(len(lst[0])):
            if lst[i][j] == 1:
                count += isinnet(i,j)
    return count

lst = eval(input())
print(sitecount(lst))

你可能感兴趣的:(《数据结构与算法分析python版》第十二周编程作业)