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

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

1、找到小镇法官

题目内容:
在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。
如果小镇的法官真的存在,那么:

1、小镇的法官不相信任何人。

2、每个人(除了小镇法官外)都信任小镇的法官。

3、只有一个人同时满足属性 1 和属性 2 。
给定列表 trust,该列表由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。

如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。
输入格式:
输入包含两行,第一行为一个正整数N,第二行为信任对列表trust,以合法的Python表达式给出
输出格式:
一个整数,表示法官的编号
输入样例
4

[[1,3],[1,4],[2,3],[2,4],[4,3]]
输出样例:
3

脚本

def findJudge(N,trust):
    trustlst = [0] *N
    trustedlst = [0]*N
    found = False
    for item in trust:
        for i in range(2):
            if i ==0:
                trustlst[item[0]-1] += 1
            else:
                trustedlst[item[1]-1] +=1
    i =0
    while not found:
        if trustlst[i] == 0:
            if trustedlst[i] == N-1:
                found = True
                return i+1
        i+=1
        if i == N:
            return -1
            break
            
    
 
N = int(input())
trust = eval(input())
print(findJudge(N, trust))

2、远离大陆

题目内容:
你现在手里有一份大小为 M x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地

对于每个海洋方格,其存在一个距离它最近的陆地方格,相应有一个到陆地的最小距离

请输出上述所有最小距离中的最大值。

我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |x0 - x1| + |y0 - y1| 。

如果地图上只有陆地或者海洋,请返回 -1。
输入格式:
输入共1行,为一个仅包含0与1的嵌套列表,用合法的Python表达式给出
输出格式:
一个整数,表示最短距离
输入样例
[[1,0,1],[0,0,0],[1,0,1]]
输出样例:
2
脚本

def searchland(lst):
    size = len(lst)*len(lst[0])
    oceanlst = []
    landlst= []
    minvaluelst = []
    minvalue = 0
    maxvalue = 0
    for i in range(len(lst)):         
        for j in range(len(lst[0])):     
            if lst[i][j] == 1:
                landlst.append((i,j))
            elif lst[i][j] == 0:
                oceanlst.append((i,j))
    # 判断是否全为海洋活陆地
    if len(landlst) == size or len(oceanlst) ==size:
        return -1
    
    # 计算离的最近的陆地的最远距离
    for ocean in oceanlst:
        minvalue = min([abs(ocean[0]-land[0])+abs(ocean[1]-land[1]) for land in landlst])
        minvaluelst.append(minvalue)
        
    maxvalue = max(minvaluelst)
    return maxvalue


lst = eval(input())
print(searchland(lst))
    

3、钥匙和房间

题目内容:
有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。

在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。

最初,除 0 号房间外的其余所有房间都被锁住。

你可以自由地在房间之间来回走动。

请判断是否可以最终打开所有房间。

输入格式:
一行嵌套列表,列表长度为N,以合法的Python表达式格式给出

输出格式:
True或False,代表是否可以进入每个房间
输入样例
[[1],[2],[3],[]]
输出样例:
True
脚本

def openrooms(lst):
    q = []
    i = 0
    q.append(i)
    while i <len(lst):     
        for key in lst[i]:
            q.append(key)
            if key in q[:-1]:
                q.pop()
        i = i+1            
    if i ==len(lst):
        return True
    else:
        return False


lst = eval(input())
print(openrooms(lst))

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