有些问题并非图相关问题,但可以通过抽象为图,建立模型,运用广度优先遍历求得一点到另外一点的最短路径,来解决问题
应用:
Leetcode 279. Perfect Squares
给出一个正整数n,寻找最少的完全平方数,使他们的和为n
如 12 = 4+4+4, 13 = 9 + 4
思路:
将从n到0的每个数字作为图中一个点,每两个数字之间如果相差一个完全平方数,则用一条边相连,如:
4 3 2 1 0 之间都相差1,1X1 = 1,所以两两之间用一条边相连,而4不仅和3相差1,4更和0相差4,2X2 = 4,所以4和0之间用一条边相连
基于此模型,再通过队列,通过广度优先遍历,这个问题就变成从n到0通过几条路径最短,且一定有解
import Queue
class Solution