题目来源:b站蓝桥杯Python省赛集训p4
题目:
思路:
当遇到一块没被污染的海域,向他的上下左右四个方向延申,直到到达已被污染的海域,即可遍历整一块没被污染的海域。
我们可以在遇到一块没被污染的海域时,计数一次,再将整一块没被污染的海域标记成已遍历过的,然后只要再继续遍历没有遍历的海域,重复以上过程。最后输出总计数即为答案。
可以使用递归函数,标记没被污染的海域,再依次向四个方向遍历,当出界或直到遇到被污染的海域时停止,然后返回上一个节点进行下一个方向。这就是深度优先搜索dfs的思想。
代码:
list=[[1,1,0,0,0], [1,0,1,0,0], [1,0,0,0,0], [1,1,0,1,1]] m=4#hang n=5#lie def dfs(x,y): if x<0 or x==m or y<0 or y==n or list[x][y]==0: return 0 list[x][y] = 0 dfs(x+1,y) dfs(x - 1, y) dfs(x, y+1) dfs(x, y-1) count=0 for i in range(m): for j in range(n): if list[i][j]==1: dfs(i,j) count+=1 print(count)