DIR = [[0,1],[1,0],[0,-1],[-1,0]]
def dfs1(graph,visited,x,y):
for i in range(4):
nextx = x+DIR[i][0]
nexty = y+DIR[i][1]
if nextx<0 or nexty<0 or nextx>=len(graph) or nexty>=len(graph[0]):
continue
if not visited[nextx][nexty] and graph[nextx][nexty]:
visited[nextx][nexty] = 1
dfs1(graph,visited,nextx,nexty)
def main():
n,m = map(int,input().split())
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
visited = [[0]*m for _ in range(n)]
res = 0
for i in range(n):
for j in range(m):
if graph[i][j] and not visited[i][j]:
# 发现新大陆
res +=1
visited[i][j] = 1
# 查看周围的领土
dfs1(graph,visited,i,j)
print(res)
if __name__ == '__main__':
main()
python复制代码
DIR = [[0,1],[1,0],[0,-1],[-1,0]]
def dfs2(graph,visited,x,y):
if visited[x][y] or not graph[x][y]:
# 海洋或者已经处理过的陆地,不重复访问
return
visited[x][y] = 1
for i in range(4):
nextx = x+DIR[i][0]
nexty = y+DIR[i][1]
if nextx<0 or nexty<0 or nextx>=len(graph) or nexty>=len(graph[0]):
continue
dfs2(graph,visited,nextx,nexty)
def main():
n,m = map(int,input().split())
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
visited = [[0]*m for _ in range(n)]
res = 0
for i in range(n):
for j in range(m):
if graph[i][j] and not visited[i][j]:
# 发现新大陆
res +=1
# 查看周围的领土
dfs2(graph,visited,i,j)
print(res)
if __name__ == '__main__':
main()
广搜
python复制代码
DIR = [[0,1],[1,0],[0,-1],[-1,0]]
def bfs(graph,visited,x,y):
# 坑:入队列就要变成访问过;如果取出的时候才标记访问过,会有大量重复节点被标记
queue = []
queue.append([x,y])
visited[x][y] = 1
while queue:
curx,cury = queue.pop(0)
for i in range(4):
nextx = curx+DIR[i][0]
nexty = cury+DIR[i][1]
if nextx<0 or nexty<0 or nextx>=len(graph) or nexty>=len(graph[0]):
continue
if not visited[nextx][nexty] and graph[nextx][nexty]:
queue.append([nextx,nexty])
visited[nextx][nexty] = 1
def main():
n,m = map(int,input().split())
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
visited = [[0]*m for _ in range(n)]
res = 0
for i in range(n):
for j in range(m):
if graph[i][j] and not visited[i][j]:
# 发现新大陆
res +=1
# 查看周围的领土
bfs(graph,visited,i,j)
print(res)
if __name__ == '__main__':
main()
DIR = [[0,1],[1,0],[0,-1],[-1,0]]
count = 0 # 全局,因为dfs可能拿不到返回值【第一种写法】
def dfs1(graph,visited,x,y):
global count
for i in range(4):
nextx = x+DIR[i][0]
nexty = y+DIR[i][1]
if nextx<0 or nexty<0 or nextx>=len(graph) or nexty>=len(graph[0]):
continue
if not visited[nextx][nexty] and graph[nextx][nexty]:
visited[nextx][nexty] = 1
count +=1
dfs1(graph,visited,nextx,nexty)
def main():
n,m = map(int,input().split())
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
visited = [[0]*m for _ in range(n)]
res = 0
global count
for i in range(n):
for j in range(m):
if graph[i][j] and not visited[i][j]:
# 发现新大陆,陆地面积置为1
count = 1
visited[i][j] = 1
# 查看周围的领土
dfs1(graph,visited,i,j)
# 全局的count在遍历中得到了更新
res = max(res,count)
print(res)
if __name__ == '__main__':
main()
python复制代码
DIR = [[0,1],[1,0],[0,-1],[-1,0]]
count = 0 # 全局,因为dfs可能拿不到返回值【第一种写法】
def dfs2(graph,visited,x,y):
global count
if not graph[x][y] or visited[x][y]:
return
visited[x][y] = 1
count +=1
for i in range(4):
nextx = x+DIR[i][0]
nexty = y+DIR[i][1]
if nextx<0 or nexty<0 or nextx>=len(graph) or nexty>=len(graph[0]):
continue
dfs2(graph,visited,nextx,nexty)
def main():
n,m = map(int,input().split())
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
visited = [[0]*m for _ in range(n)]
res = 0
global count
for i in range(n):
for j in range(m):
if graph[i][j] and not visited[i][j]:
# 发现新大陆,陆地面积置为1
count = 0
# 查看周围的领土
dfs2(graph,visited,i,j)
# 全局的count在遍历中得到了更新
res = max(res,count)
print(res)
if __name__ == '__main__':
main()
广搜
python复制代码
DIR = [[0,1],[1,0],[0,-1],[-1,0]]
count = 0 # 全局,因为dfs可能拿不到返回值【第一种写法】
def bfs(graph,visited,x,y):
queue = []
queue.append([x,y])
visited[x][y] = 1
global count
count = 1
while queue:
curx,cury = queue.pop(0)
for i in range(4):
nextx = curx+DIR[i][0]
nexty = cury+DIR[i][1]
if nextx<0 or nexty<0 or nextx>=len(graph) or nexty>=len(graph[0]):
continue
if not visited[nextx][nexty] and graph[nextx][nexty]:
queue.append([nextx,nexty])
visited[nextx][nexty] = 1
count +=1
def main():
n,m = map(int,input().split())
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
visited = [[0]*m for _ in range(n)]
res = 0
global count
for i in range(n):
for j in range(m):
if graph[i][j] and not visited[i][j]:
# 发现新大陆,陆地面积置为1
visited[i][j] = 1
# 查看周围的领土
bfs(graph,visited,i,j)
# 全局的count在遍历中得到了更新
res = max(res,count)
print(res)
if __name__ == '__main__':
main()