TPS_AOV_2 Algorithm made by Knuth {照TAOCP 2.2.3 完成}
我最近写了几篇TAOCP阅读笔记,大家可以去看看
其实我已近把全书很大一部分(除1.2,1.5,2.3,4,5节,及很多Execrise没写完)
好吧开始今天的写作。
(专有名词之前讲过了 大家可以去我之前的文章)了解
Question(TPS.cpp)
Input(TPS.qus)
第一行是一个数 NodeC,表示节点数
后面?行是两个数j,k,表示j在k前输出(1<j,k<=NodeC)
最后一行是两个0
Output(cout)
第1行:
一串从1到n的数字(无空格),并且对于在输入第2~n行出现的所有j,k,j在k前输出
若无满足的序列,则此行输出“Input Error”
第二行(这行是系统输出)
第一行若是Input Error,返回码为1
不然为0(听不懂?死一边去,就是出了错exit(1)不然return 0;)
Test
IN:
9
9 2
3 7
7 5
5 8
8 6
4 6
1 3
7 4
9 5
2 8
0 0OUT:
193274586
System Exit With Code 0
第二个例子:
IN:
1
1 1
0 0OUT:
Input Error
System Exit With Code 1
好了,这次我再讲讲思路
大家可以自己买TAOCP哈。
思考一下,拓扑排序无非就是寻找入度为0的那些Node,既然这样我们就应当把这些入度存下来。
为了方便找到值为0的NODE,我们可以把它存在一个Queue/Stack里
每找到一个无入度的NODE,我们需要遍历它所有的出度一遍,为了节省空间复杂度,同时方便遍历出度,我们可以用邻接表替代邻接矩阵。
对了,动态内存分配和指针这次会大量出现,请坐稳扶好。
code:
#include<iostream>
#include<fstream>
#include<queue>
#include<cstring>
#include<cstdlib>
#define ML 1000
using namespace std;struct Node{Node* next;int v;
};ifstream fin("TPS.qus");
Node* nds=NULL;//自动分配装逼(内存泄漏,深感不安)
queue<int> zs;
queue<int> LR;int cnt=0;
int un_print=0;int main(){//"Tobological sort"//T1//输入fin>>cnt;un_print=cnt;//calloc了解一下//auto allocate memnds=(Node*)calloc(cnt+1,sizeof(Node));//直接访问1~n,免得减一for(int i=1;i<=cnt;++i){//calloc 自动将值设为0nds[i].next=NULL;}int j=0;int k=0;Node* temp=NULL;while(true){//T2fin>>j>>k;if(j==0)break;//T3++(nds[k].v);temp=(Node*)malloc(sizeof(Node));temp->v=k;temp->next=nds[j].next;nds[j].next=temp;}//T4for(i=1;i<=cnt;++i){if(nds[i].v==0){zs.push(i);}}while(!zs.empty()){//T5LR.push(zs.front());--un_print;temp=nds[zs.front()].next;//T6while(temp!=NULL){if((--nds[temp->v].v)==0){zs.push(temp->v);}Node* t2=temp;temp=temp->next;free((void*)t2);}zs.pop();}if(un_print!=0){cout<<"Input Error"<<endl;exit(1);}while(!LR.empty()){cout<<LR.front();LR.pop();}cout<<endl;free(nds);return 0;
}
好啦,下次继续
TPS_AOV_2 Algorithm made by Knuth {照TAOCP 2.2.3 完成}相关推荐
- Donald Knuth 传奇
作者:yueq Donald Knuth自传的开头这样写道:"Donald Knuth真的只是一个人么?"作为世界顶级计算机科学家之一,Knuth教授已经完成了编译程序.属性文法和 ...
- 常见算法在实际项目中的应用
近日Emanuele Viola在Stackexchange上提了这样的一个问题,他希望有人能够列举一些目前软件.硬件中正在使用的算法的实际案例来证明算法的重要性,对于大家可能给到的回答,他还提出了几 ...
- 微软等数据结构+算法面试100题全部答案集锦
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...
- 数据结构与算法 Big O 备忘录与现实
不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感到不可理解,算 ...
- 顶级程序员的心得ndash;Coders at Work
[原文在 www.yishan.cc 连载, 现在合成一篇] 我去年读了 "Coders at Work", 对15 位顶级程序员的采访, 总共600页. 从采访的模式看,有 ...
- 顶级程序员的心得 –– Coders at Work
顶级程序员的心得 –– Coders at Work 说明:这篇文章是我 2010 年的原创,但是发现 csdn 的版本把格式全部搞坏了,原文在这里 我2009年读了 "Coders at ...
- 微软面试100题(含全部答案)
引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年之际,特此分享出微软面试全部100题答案的完整版,以作为对本博客所有读者的回馈. 一年之前的10月1 ...
- 微软面试100题2010年版全部答案集锦
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一 ...
- 重磅分享:微软面试100题2010年版全部答案完整亮相
欢迎zhangxusoftgcy我的:资源博客空间简历设置|帮助|退出 CSDN首页 资讯 论坛 博客 下载 搜索 更多 CTO俱乐部 学生大本营 培训充电 移动开发 软件研发 云计算 程序员 TUP ...
- 微软等数据结构+算法面试100题全部答案完整亮相
重磅分享:微软等数据结构+算法面试100题全部答案完整亮相 来源: 王永刚的日志 本文转载自CSDN大牛的一篇博客:http://blog.csdn.net/v_july_v/article/deta ...
最新文章
- 软件测试:黑盒白盒与动态静态之间有必然联系吗
- 30个Python常用极简代码,拿走就用
- 数学之美 系列十一 - Google 阿卡 47 的制造者阿米特.辛格博士
- 搭建Hexo最后一步:hexo d时 没反应 直接跳过解决办法(转)
- .NET Core 使用MailKit发送电子邮件
- 如何分辨PoE工业交换机是否标准供电
- 单片机常用的几种通信协议
- P8级别的顶级“并发编程”宝典,最全指南
- 内含福利|CSDN携手字节跳动:云原生Meetup北京站报名热烈启动,1月8日见!
- rsync 自动创建目录的坑点
- 路床灰土计算机控制,亳阜高速公路路床灰土施工方案
- Go 语言学习总结(1)—— Go 入门简介
- SqlServer 分页批按时间排序
- 解题报告:poj2689 Prime Distance
- 启动Activity不显示界面
- vue 第八天 小结 作业模拟购物车
- 溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)
- 使用fiddler绕过“请在微信客户端打开链接”
- 动手实践 用 easyboot 制作N合一光盘
- windows10删除$WINDOWS.~BT文件