求问解决类似下图这种问题的算法有哪些?

如下图1,共有P个层级,对于任意层级p有Jp个节点,任意两节点Ai、Bj之间的单向路径权重为D(i,j),要求的是从第一层到第P层的最短距离是什么?(**注意,P一般来说很大,不推荐遍历这种穷举的算法**)
图片说明

如果有这些求解算法的话,那么从第一个层级到第P个层级,再回到第一个层级的最短路径算法又有哪些呢?如下图2所示
图片说明

如果每一层的每个节点都和下一层每个节点连,这个就是全连接网络(full connected neural network)

你好,可以用FloydW方法,简单明瞭:
//n 表示节点个数(这里设为100个),m表示路径数量,MAX表示无穷大,shortpathInit()设定路径权重值,findShortestPath()打印出任意两点最短路径
#define MAX 9999999
#define n 100
int e[n][n];
int m;
void shortpathInit(void)
{
int i, j,u,v,val;
scanf("%d",&m);// path number
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
if (i == j)e[i][j] = 0;
else e[i][j] = MAX;
}
for (i = 0; i < m; i++)
{
scanf("%d%d%d", &u, &v, &val);
e[u][v] = val;
}
}

void findShortestPath(void)
{
int i, j, k;
for (k = 0; k < n; k++)
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
if (e[i][j] > e[i][k] + e[k][j])
e[i][j] = e[i][k] + e[k][j];
}

for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
    printf("(%d,%d:%d)",i,j,e[i][j]);
    if ((j + 1) % 16 == 0)printf("\n");
}

}

int main()
{
shortpathInit();
findShortestPath();
return 0;