iOS Swift import Foundation /** m行, n列 10,10 0,0,0,0,0,0,0,0,0,0 0,0,0,1,1,0,1,0,0,0 0,1,0,0,0,0,0,1,0,1 1,0,0,0,0,0,0,0,1,1 0,0,0,1,1,1,0,0,0,1 0,0,0,0,0,0,1,0,1,1 0,1,1,0,0,0,0,0,0,0 0,0,0,1,0,1,0,0,0,0 0,0,1,0,0,1,0,0,0,0 0,1,0,0,0,0,0,0,0,0 6,8 */ class Node { let value: Int var check: Bool = false init(_ value: Int) { self.value = value } } let first = readLine()!.split(separator: ",") let (m, n) = (Int(first[0])!, Int(first[1])!) var teamCount = 0 var count = 0 var maxCount = 0 var dict: [String: Node] = [:]; for row in 0..<m { let line = readLine()!.split(separator: ",").map{ Int($0) }.compactMap { $0 } for column in 0..<n { let location = "\(row)\(column)" dict[location] = Node(line[column]) } } func traverse(node: Node, row: Int, column: Int) { count += 1 node.check = true if column != 0, row != 0, let topleft = dict["\(row - 1)\(column - 1)"], topleft.value == 1, !topleft.check { traverse(node: topleft, row: row - 1, column: column - 1) } if row != 0, let top = dict["\(row - 1)\(column)"], top.value == 1, !top.check { traverse(node: top, row: row - 1, column: column) } if row != 0, column != n - 1, let topright = dict["\(row - 1)\(column + 1)"], topright.value == 1, !topright.check { traverse(node: topright, row: row - 1, column: column + 1) } if column != 0, let left = dict["\(row)\(column - 1)"], left.value == 1, !left.check { traverse(node: left, row: row, column: column - 1) } if column != n - 1, let right = dict["\(row)\(column + 1)"], right.value == 1, !right.check { traverse(node: right, row: row, column: column + 1) } if row != m - 1, column != 0, let buttomleft = dict["\(row + 1)\(column - 1)"], buttomleft.value == 1, !buttomleft.check { traverse(node: buttomleft, row: row + 1, column: column - 1) } if row != m - 1, let buttom = dict["\(row + 1)\(column)"], buttom.value == 1, !buttom.check { traverse(node: buttom, row: row + 1, column: column) } if row != m - 1, column != 0, let buttomright = dict["\(row + 1)\(column + 1)"], buttomright.value == 1, !buttomright.check { traverse(node: buttomright, row: row + 1, column: column + 1) } } for row in 0..<m { for column in 0..<n { let location = "\(row)\(column)" guard let node = dict[location], node.value == 1, !node.check else { continue } teamCount += 1 maxCount = count > maxCount ? count : maxCount count = 0 traverse(node: node, row: row, column: column) } } maxCount = count > maxCount ? count : maxCount print(teamCount, maxCount)
点赞 评论

相关推荐

牛客网
牛客企业服务