图的总结
拓扑排序精髓就是找点,indegree数组–
方法一:没有用队列
int inDegree[maxn] = { 0 };
并在初始化时收集好每个点的入度。
按照:
- 找indegree=0的点
- 删该点的边(其他点的入度)
- 重复操作直到找到不到返回-1
/*initialize map and degree*/
void init()
/*get dot in 0 degree*/
int getDegree()
/*delete chosen dot outdegree */
void updateIndegree(int s)
bool topologicalSort()
{
int s, ans = N;
while (true)
{
s = getDegree();
book[s] = true;
if (s == -1) break;
ans--;
updateIndegree(s);
}
if (ans > 0)return false;
return true;
}
方法具体实现
/*initialize map and degree*/
void init()
{
int u, v