q1:
输入是一个城市的地图的大小(m,n),和一个list,里面包含所有有locker的地理位置。输出一个m*n的二位数组,每个单元的值为到最近locker的距离。问时间复杂度
(这题要从每个locker同时开始bfs)
Q2:
给一个图片,有着亮的点和黑的点,判断一共有多少个黑暗的块儿。时间复杂度。(这题我觉得相当于找出一个图中有多少个联通分量,我用bfs做的,用一个二维数组记录每个点是否被访问过)
Q3:
给定一个二维数组,每个1连接起来的地方就叫一个 island,问此图中有个多少个island。
----------------->m
|00001000000
|10011110001
|11110111011
|00000000000
n.....................
分析了一下应该是关于图的问题,找到有几个连通图,遍历所有节点进行 BFS:用队列来搞广度优先搜索。
算法: 用队列,每个节点得保存一个visited 标志。
1:从第一行开始,逐行从左向右扫描每个节点(按下面的算法2~4步 ),直到该行所有节点都处理了,再开始下一行。。
2:如果该节点是未访问的,数值为1,则把该节点入队列,并标记它为visted,把island数目+1.
3: 从队列中取出一个node,它左边相邻的,下边相邻的,和右边相邻的,且未访问的,且数字是1节点,把这些节点入队列并标记为visited,直到该队列为空。
4:然后处理该行下一个节点。