博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拓扑排序\有向无环图判断 及经典问题 - 选课
阅读量:7232 次
发布时间:2019-06-29

本文共 1217 字,大约阅读时间需要 4 分钟。

比较好的一个算法

clipboard.png

DAG : 有向无环图。

xmuOJ 选课

一个点的入点(指向它的点怎么表示)怎么表示? 数组 or vector?

我最后选择了邻接矩阵。

#include 
#include
#include
#include
#include
#include
#include
using namespace std;typedef queue
Q;int main(){ int N; string name[501]; int a[501][501]; //a[i][j] = 1 则 i指向j int rudu[501]; Q topQ;//top dui lie Q zeroQ; int i,j,k; //initialize memset(a, 0, sizeof(a)); scanf("%d", &N); for (i = 1; i <= N; i++) cin >> name[i]; for (i = 1; i <= N; i++) { scanf("%d", rudu + i); if (rudu[i] == 0) zeroQ.push(i); for ( j = 1; j <= rudu[i]; j++) { int b ; scanf("%d", &b); a[b][i] = 1; } } int top[501], cnt = 0; while (!zeroQ.empty()) { top[++cnt] = zeroQ.front(), zeroQ.pop();// for ( i = 1; i <= N; i++) { if (a[top[cnt]][i] == 1) { if (--rudu[i] == 0) { zeroQ.push(i); } } } } if (cnt!= N) { printf("Impossible!"); return 0; } for (i = 1; i < N; i++) { cout << name[top[i]]; printf(" "); } cout << name[top[N]]; return 0;}/*9Introduction_to_Computer_Science C_Programming_Language Data_Structure Design_and_Analysis_of_Algorithms Mathematical_Analysis Advanced_Algebra Probability_and_Statistics Numerical_Analysis Operating_System01 12 1 23 1 2 3001 52 5 62 1 2*/

转载地址:http://oyvfm.baihongyu.com/

你可能感兴趣的文章
iOS企业证书申请介绍
查看>>
hdu 1950 Bridging signals(最长上升子序列)
查看>>
jquery学习收获
查看>>
es6js promise在ie中报错“未定义”
查看>>
思科HSRP和Port-channel配置
查看>>
常用的sql脚本(陆续更新)
查看>>
mongodb的gridfs
查看>>
api图片传输,转成64位字符串进行传输
查看>>
Matlab高斯分布输入的PID控制
查看>>
【Java】自定义异常
查看>>
Ubuntu14.04server开放rootssh登录权限
查看>>
错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
查看>>
Linux 权限基础说明
查看>>
2017级面向对象程序设计寒假作业3
查看>>
迭代器
查看>>
Linux OpenCV 静态链接错误
查看>>
Java多线程&集合类-详细版
查看>>
Flask即插视图与tornado比较
查看>>
springboot笔记(一)
查看>>
学习 - SpringMVC
查看>>