一共三道题,最后一道为选答题(反正我是在指定时间里做不出来的,出的问题太多了,调了一个小时)
- 茉莉有一个画板,画板可以抽象成100行,每行100个像素点的正方形,茉莉在画板上画画,她一共画了n次,每次将一个矩形涂上颜色,茉莉想知道一共有多少个像素点被她涂过颜色,若一个像素点被涂了k次,那么认为有k个像素点被涂过颜色。
- 茉莉邀请她的朋友参加周末的派对,茉莉买了3种颜色的气球,现在她要用这些气球来装饰餐桌,每个餐桌只用恰好3个气球装饰,要求3个气球的颜色不能完全一样,可以是2种或者3种,茉莉想知道这些气球最多能装饰多少张餐桌。
- 给你一个图,0节点连接着一个联通块a,1节点连接着一个联通块b,ab仅由01这条边相连,现在我们定义奇异路劲为恰好经过0-1这条边一次的路劲,其他边可以经过任意次,且路径不带方向,1-2-3与3-2-1认为是两条路径,重边也算多条路径,在这个图中有无数奇异路径,问第k短的奇异路径长度是多少?
画板
主要是输入数据如何存储,以便后面的遍历,搞了有10来分钟,不然很快就写完了
派对
我的想法是先取3个,然后再取两个,不知道对不对,帮别人做的
奇异路径
这个题目是一道选答题,图的问题一般是不会涉及的,还算比较简单吧,属于直接告诉思路型。
这道题我开始用DFS做,也能做,但是如果出现环的问题,就跳不出来了。
这里跳出条件是如果当前节点要走的下一个节点和当前节点的前一个节点相同,表明此时这条路径可以终止。用一个boolean类型来记录当前路径是否已经经过了0-1边,终止的时候判断该布尔值,如果为true,则算一条路径。然后将所有的路径全部走完,将长度存在一个数组中,最后对这个数组排序,找出第k小的值返回。
代码如下:
这是一个很普通很笨的方法,这道题已经暗示了第k小的路径,表明需要用BFS写,将上面的DFS改写为下面的BFS,BFS的原理就是对n种可能的走法同时向前前进一步,正好符合该题意图,每次走一步,然后判断是否该路径终止,如果终止,继续判断是否满足奇异,如果满足则作为一条路径,用一个变量来记录,当这个变量的值达到k的时候,就是第k小的路径,因为BFS每次出去的路径都是当前最小的路径。
代码如下: