一、主要数据结构:
1、 map[ n ][ n ] : 记录节点 i是否可以到达 j(一般是有向图)
2、index[ n ] : 记录每一个节点的入度
二、主要步骤:
1、最外层一个for循环 : 1->n 每一次循环找到一个节点(如果拓扑排序存在的话)
2、在每一次循环中再循环从Index[ 1....n ]中寻找 index[i] == 0的 i, 证明节点i的入度已经为0,则将该节点输出,再利用一个循环从map[ i][1...n ] 找到i能到达的节点j (map[ i ][ j ] == 1),
将对应的节点j的入度减小1(index[ j ]--)。
三、主要代码
for( int i=0; i
for(int j=0; j
if(index[ j ] == 0){
printf("%d \n", j );
for(int k=0; k
if(map[j][k] == 1){
index[k]--;
}
}
}
}
}
阅读(1180) | 评论(0) | 转发(0) |