阿里巴巴笔试编程题题解

作者:尹斗俊喊你学习了啊
链接:https://www.nowcoder.com/discuss/80763
来源:牛客网
算法岗
花了二十分钟调试了摄像头,选择题全靠作为女生的第六感解决的2333 
(1)求八个兵阵的士兵个数的最大最小值
思路:dfs+记忆化搜索
import sys
if True:
    rows = int(raw_input())
    cols = int(raw_input())
    matrix = [[0 for j in range(cols)] for i in range(cols)]
    for i in range(rows):
        line = raw_input().split()
        for j in range(cols):
            matrix[i][j] = int(line[j])
    disvisited = [[True for j in range(cols)] for i in range(rows)]
    min_ = sys.maxint
    max_ = -sys.maxint

    def dfs(x,y):
        dx = [0,0, 1,1, 1,-1,-1,-1]
        dy = [1,-1,0,-1,1,0 ,-1,1]
        tmp = matrix[x][y]
        disvisited[x][y] = False

        for k in range(8):
            nx = x+dx[k]
            ny = y+dy[k]
            if nx>=0 and nx<rows and ny>=0 and ny<cols and disvisited[nx][ny] and matrix[nx][ny]:
                tmp+=dfs(nx,ny)
        return tmp



    for i in range(rows):
        for j in range(cols):
            if disvisited[i][j] and matrix[i][j]:
                ans = dfs(i,j)
                min_ = min(min_,ans)
                max_ = max(max_,ans)
    print max_
    print min_
(2)求最大的旅行路径数
思路:节点i到节点j存在路径的话,那么节点i的旅游路径数+=从节点j出发的路径数+1
ret = dict()
def solved(i):
    if i in ret:
        return ret[i]
    ans = 0
    for j in range(n):
        if a[i][j]:
            ans += 1+solved(j)
    ret[i] = ans
    return ans

n = int(raw_input())
l = int(raw_input().split()[0])
a = [[0 for i in range(n)] for j in range(n)]
for k in range(l):
    line = raw_input().split()
    start = int(line[0])
    end = int(line[1])
    a[start][end] = 1

for i in range(n):
    solved(i)

print sorted(ret.items(),key = lambda x:x[1],reverse=True)[0][1]

#实习##春招#
全部评论
我这个没样例是真的难受
点赞 回复 分享
发布于 2018-05-11 21:22
Python代码真简洁
点赞 回复 分享
发布于 2018-05-11 20:57
点赞 回复 分享
发布于 2018-05-11 20:58
膜拜大神,完全做不出来
点赞 回复 分享
发布于 2018-05-11 20:59
python是真的强
点赞 回复 分享
发布于 2018-05-11 21:04
楼主也棒棒的!
点赞 回复 分享
发布于 2018-05-11 21:04
我也是这两题,楼主厉害啊
点赞 回复 分享
发布于 2018-05-11 21:07
请问这个if True:有啥用啊。。。
点赞 回复 分享
发布于 2018-05-11 21:11
能麻烦楼主明示一下第一题的要求是什么。
点赞 回复 分享
发布于 2018-05-11 22:08
66666,我第一题不会递归,写了好长还没写对😭
点赞 回复 分享
发布于 2018-05-11 22:11
用python不容易超时超内存吗
点赞 回复 分享
发布于 2018-05-11 22:13
NJUPT大三同届?
点赞 回复 分享
发布于 2018-05-11 22:42
小姐姐好棒呢~
点赞 回复 分享
发布于 2018-05-11 22:50
第一题一眼就看到一个错好像。。。。
点赞 回复 分享
发布于 2018-05-12 00:13
大佬能不能给一下数据研发编程题的答案 ( ˘•ω•˘ )
点赞 回复 分享
发布于 2018-05-12 08:59
蛮难的:感觉自己做绝壁跪,大佬算法好……这个是阿里算法岗春招笔试?
点赞 回复 分享
发布于 2018-05-12 09:35
貌似知道是哪位大佬了哈哈
点赞 回复 分享
发布于 2018-05-12 10:37
第一题Java DFS只能过60好奇怪
点赞 回复 分享
发布于 2018-05-12 12:26
啊,用python写真棒,我用c++第一题一直只有40%,第二题没看题目,能够再详细说下第二题题目吗😃
点赞 回复 分享
发布于 2018-05-12 16:01
大佬,有题目吗
点赞 回复 分享
发布于 2021-03-06 11:45

相关推荐

点赞 评论 收藏
分享
拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
5 51 评论
分享
牛客网
牛客企业服务