有向无环图可作为动态规划问题应用的一个原型。
所谓有向无环图,实是一种类似于链表的数据结构其关键在于判断以当前节点作为根节点的子节点。
链状结构图:
树状结构图:
例题:矩阵最长路径
主要函数过程如下:
const int maxn = 10000;
int n = 4; //对于每个根节点有4个子节点
int G[maxn][maxn]; //矩阵存图
int d[maxn]; //记录最长路径
int dp(int i) {
if (d[i] > 0)return d[i];
d[i] = 1; //当前所在位置也算一步
for (int j = 1; j <= n; j++) { //遍历i的每一个子节点
if (G[i][j]) //判断边界
d[i] = max(d[i], dp(j) + 1); //d[i] 保存i为根结点的最长路
}
return d[i];
}
代码:
#include<cs