高手解答 全拓扑排序 c语言算法 或者 算法思想也行啊

急求 望高手解答
2025-06-26 19:52:18
推荐回答(2个)
回答1:

拓扑排序,很多时候,会作为算法的预处理。
它是针对有向无环图。
我空间中写过,比较详细。
算法思想:
针对一个有向无环图,求它的拓扑排序的一个简单方法:首先找到这个图中入度为0的顶点。把它放在序列的第一个位置,然后删除改顶点和它的边。得到一个新的有向无环图,在找这个图中入度为0的顶点。放在序列的下一个位置,然后再删除改顶点和它的边。。。,这个步骤重复直到图中所有的顶点都在序列中。

详细请看,有程序代码和相应的图片说明。
http://hi.baidu.com/huifeng00/blog/item/667348af89c42e044b36d6a6.html

回答2:

给个C++的吧,改成C很也简单。

bool TopologicalSort(int a[][101]) //可以完成拓扑排序则返回True
{ int n = a[0][0], i, j;
int into[101], ans[101];
memset(into, 0, sizeof(into));
memset(ans, 0, sizeof(ans));
for (i = 1; i <= n; i++)
{ for (j = 1; j <= n; j++)
{if (a[i][j] > 0) into[j]++;}
}
into[0] = 1;
for (i = 1; i <= n; i++)
{j = 0;
while (into[j] != 0)
{ j++;
if (j > n) return false;
}
ans[i] = j;
into[j] = -1;
for (int k = 1; k <= n; k++)
{ if (a[j][k] > 0) into[k]--; }
}
for (i = 1; i <= n; i++)
{ cout << ans[i] << " "; }
cout << endl; return true; }