DSOJ Topological Sort(拓扑排序)
来源:互联网 发布:dnf战斗力基础属性算法 编辑:程序博客网 时间:2024/05/21 11:36
题目链接
#include<stdio.h>//Topological Sort(利用小顶堆使同等条件下,编号小的顶点在前)#include<string.h>#include<stdlib.h>#define MAX 100//最大的顶点个数typedef struct arc{int index;struct arc *next;}Arc;typedef struct graph{int vexnum, arcnum;Arc List[MAX];}Graph;void initial_graph(Graph *G){int Vexnum, Arcnum, i;scanf("%d%d", &Vexnum, &Arcnum);G->vexnum = Vexnum;G->arcnum = Arcnum;for (i = 1; i <= G->vexnum; i++){G->List[i].index = i;G->List[i].next = NULL;}}void create_graph(Graph *G){int i, j, k;Arc *p;initial_graph(G);for (k = 1; k <= (G->arcnum); k++){scanf("%d", &i);scanf("%d", &j);p = (Arc *)malloc(sizeof(Arc));p->index = j;p->next = G->List[i].next;G->List[i].next = p;}}void calculate_degree(Graph *G, int *degree)//Calculate Indegree{int i;Arc *p;for (i = 1; i <= G->vexnum; i++)degree[i] = 0;for (i = 1; i <= G->vexnum; i++){p = G->List[i].next;while (p){degree[p->index]++;p = p->next;}}}void SiftDown_heap(int *a, int index, int n)//SiftDown{int i, j;a[0] = a[index];i = index;j = 2 * i;while (j <= n){if (j + 1 <= n&&a[j + 1] < a[j])j = j + 1;if (a[0] > a[j]){a[i] = a[j];i = j;j = 2 * i;}elsebreak;}a[i] = a[0];}void SiftUp_heap(int *a, int index, int n)//SiftUp{int i, j;a[0] = a[index];i = index;j = i / 2;while (j >= 1){if (a[j] > a[0]){a[i] = a[j];i = j;j = i / 2;}elsebreak;}a[i] = a[0];}void create_heap(int *a, int n)//Create Samll Heap{int i;i = n / 2;while (i >= 1){SiftDown_heap(a, i, n);i--;}}int heap_sort(int *a, int n)//Return the minimum{int temp;temp = a[1];a[1] = a[n];SiftDown_heap(a, 1, n - 1); return temp;}void Topo_sort(Graph *G){int degree[MAX], i, j, a[MAX + 1],num = 0, min;//a is a small heapArc *p;calculate_degree(G, degree);for (i = 1; i <= G->vexnum; i++){if (degree[i] == 0)a[++num] = i;}create_heap(a, num);while (num > 0){min = heap_sort(a, num);num--;printf("v%d ", min);p = G->List[min].next;while (p){degree[p->index]--;if (!degree[p->index]){a[++num] = p->index;SiftUp_heap(a, num, num);}p = p->next;}}printf("\n");}int main(){Graph G;create_graph(&G);Topo_sort(&G);return 0;}
0 0
- DSOJ Topological Sort(拓扑排序)
- 拓扑排序(Topological Sort)
- 拓扑排序(Topological Sort)
- 拓扑排序(topological-sort)
- 拓扑排序(topological sort)
- 拓扑排序(topological sort)
- 拓扑排序(Topological Sort)
- topological-sort(拓扑排序)
- Topological Sort-拓扑排序
- 拓扑排序(Topological Sort)
- 拓扑排序 Topological-sort
- 拓扑排序 - Topological Sort
- Topological Sort拓扑排序
- 拓扑排序(topological sort)DFS
- 拓扑排序学习(Topological Sort)
- 图论算法:拓扑排序(Topological Sort)
- pta ——Topological Sort(拓扑排序)
- 有关Topological-sort(拓扑排序)的belabela...
- C#_使用LitJson解析Json
- Java学习之Iterator(迭代器)的一般用法 (转)
- How to install subversion 1.7 (svn1.7) on ubuntu14.04 LTS [Tested By Carson Zang, passed!]
- Node.js Express学习笔记
- 【xpdf】ms_make.bat 在windows下的编译问题
- DSOJ Topological Sort(拓扑排序)
- Bootstrap快速学习笔记(1)排版系列之一
- Yocto tips (6): Yocto中如何共享已经下载的文件
- 热备份和冷备份的区别和联系
- Yocto tips (1): Yocto 编译后文件放在了哪里 输出文件位置
- 详细探究Spark的shuffle实现
- 最短路径算法—Floyd(弗洛伊德)算法分析与实现(Python)
- c语言的日常心得与总结
- C#设置程序开机自启动,代码别人的,没有经过测试