注:对于算法与设计实验仅提供代码,不提供流程图等其他内容


2023.3.15更新:重新定义输入模式,增加对有环图的检查。

#include <iostream>
#include <stack>
#include <vector>using namespace std;// Node结构体
typedef struct Node{unsigned char Name{};bool is_visited = false;vector<Node*> sons;
}Node;// 临时栈和拓扑排序栈
stack<Node*> temp_stack;
stack<Node*> top_stack;//拓扑排序函数
void TopSort(Node* node) {if (node->is_visited) {return;}temp_stack.push(node);for (auto &i : node->sons) {TopSort(i);}node->is_visited = true;top_stack.push(temp_stack.top());temp_stack.pop();
}// 检查是否有环函数
bool check(Node* node) {if (node->is_visited) {return true;}if (!node->sons.empty()) {node->is_visited = true;for (auto &i : node->sons) {if (check(i)) {return true;}}} else {return false;}
}int main() {vector<Node*> all_nodes;//输入节点数和边数int node_num, edge_num;//输入对应的边即可cin >> node_num >> edge_num;Node *n1, *n2;int counter = 0;// 输入while (all_nodes.size() != node_num || counter != edge_num) {counter++;n1 = new Node;n2 = new Node;cin >> n1->Name >> n2->Name;bool n1_find = false;bool n2_find = false;for (auto i : all_nodes) {if (i->Name == n1->Name) {n1_find = true;n1 = i;}if (i->Name == n2->Name) {n2_find = true;n2 = i;}}n1->sons.push_back(n2);if (!n1_find) {all_nodes.push_back(n1);}if (!n2_find) {all_nodes.push_back(n2);}}//检查是否有环for (int i = 0; i < all_nodes.size(); ++i) {if (!all_nodes[i]->sons.empty()) {if (check(all_nodes[i])) {cout << "The input is not a dag" << endl;return -1;}}for (int j = 0; j < all_nodes.size(); ++j) {all_nodes[j]->is_visited = false;}}//拓扑排序for (auto &i : all_nodes) {if (!i->is_visited) {TopSort(i);}}// 输出序列int temp = top_stack.size();for (int i = 0; i < temp; i++) {cout << top_stack.top()->Name << " ";top_stack.pop();}
}

测试用例:

样例1:
4 4
1 2
2 3
3 4
4 1
样例2:
6 6
1 2
6 2
2 3
2 4
3 5
4 5

样例输出:

西南交通大学算法与设计实验1.3相关推荐

  1. 西南交通大学算法分析与设计hhy7.4积木搭楼梯: 一个小孩手中有N块正方形的积木,他总是想不同的方法来搭建各种不同的楼梯。他搭建的楼梯必须满足如下条件: 楼梯的每个台阶的砖块数不能相同,且严格递减。

    算法题目 积木搭楼梯: 一个小孩手中有N块正方形的积木,他总是想不同的方法来搭建各种不同的楼梯.他搭建的楼梯必须满足如下条件: 楼梯的每个台阶的砖块数不能相同,且严格递减. 每个楼梯至少包含两个台阶. ...

  2. 西南交通大学数据结构第二次实验报告

    写在前面: 不想学了 事先说明:本次实验有进阶要求,即写出正常的正则表达式,但是本代码并没有完成这个进阶要求,只是做了一个基础版. 附加一句:其实CMakeLists是可有可无的,一般的IDE都是自动 ...

  3. 西南交通大学计算机基础实验,西南交通大学实验教学平台-关于

    西南交通大学创建于1896年,是我国近代创办最早的三所高等学府之一. 学校素以"治学严谨"著称,历来非常重视实验教学和学生素质教育.近年来, 在国家级实验教学示范中心建设指导思想的 ...

  4. 西南交通大学计算机组成原理,西南交通大学计算机组成原理课程设计报告

    西南交通大学计算机组成原理课程设计报告 (16页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 <计算机组成实验 C>课程设计适 ...

  5. c语言上机实验指导西南交通大学,操作系统原理与应用实验指导书-西南交通大学.doc...

    操作系统原理与应用实验指导书-西南交通大学 <操作系统原理与应用> 实验指导书 西南交通大学经济管理学院 电子商务与信息管理系 王明亮编写 2007年7月 实验名称:1. 安装Linux操 ...

  6. 算法分析与设计-实验三 贪心算法设计

    文章目录 1.最优服务次序问题 2.区间相交问题 3.汽车加油问题 4.活动安排问题:考虑将一系列活动安排在科学会堂.假设有n个活动,每个活动需要花费一个单位时间.如果在时间T[i]或T[i]之前开始 ...

  7. 算法分析与设计-实验二 动态规划算法设计

    文章目录 1. 数字三角问题 2.最长公共子序列问题 3.日常购物 4.台阶问题 一.实验目的: 掌握动态规划算法的基本思想及适用条件,掌握动态规划算法的设计步骤和具体实现. 二.实验所用仪器及环境 ...

  8. 西南交通大学计算机网络,西南交通大学计算机网络实验2015-2016第2学期期末试卷...

    西南交通大学计算机网络实验2015-2016第2学期期末试卷 1 西南交通大学2015-2016学年第2学期考试试卷(A 卷) 课程代码0471024 课程名称 计算机网络工程实验 考试时间 120分 ...

  9. 格雷码算法c语言实验报告,算法设计与分析实验报告

    本科生实验报告 课程名称:算法设计与分析 实验项目:递归和分治算法 实验地点:计算机系实验楼110 专业课:物联网1601学生.2016002105 学生姓名:于 指导员:郝晓丽 2018年5月4日 ...

最新文章

  1. centos 安装git_开源物联网MQTT 5.0服务器——EMQ安装及运行教程
  2. 第十六届智能车竞赛安徽赛区成绩与奖项公示
  3. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”
  4. signature=52ceb41d49ce2ed43689f29f1663e802,SINGLE SIGN ON WITH MULTIPLE AUTHENTICATION FACTORS
  5. 神策 2020 数据驱动用户大会主会场亮点回顾(内附回放)
  6. linux脚本:给定目录下所有文件中查找某字符串
  7. jQuery中 index() 方法的使用
  8. python猴子补丁_Python猴子补丁Monkey Patch用法实例解析
  9. centOS之jre安装
  10. BlackBerry7290上网步骤
  11. ios 博客及论坛整理
  12. 【PHP攻城狮】【前端面试】【Vue.2x】【黑苹果】【创造力】| Chat · 预告
  13. PS调色类插件哪家强
  14. 女子打扮时尚穿短裙 被8岁儿子指责像二奶
  15. 血型(输血-受血)匹配数电设计
  16. 解密「UWB」精准定位黑科技
  17. java polygon 用法_从Polygon对象的Java中更新几何图形
  18. 20个经典管理学定律
  19. Go-webSocket实现广播
  20. 如何卸载Android自带系统应用

热门文章

  1. 星型模型和olap多维数据库
  2. 3D XPoint工作原理
  3. android 8(O)预装APP到data/app目录
  4. 南昌不翻车 Codeforces Round #571 (Div. 2) C,D
  5. JDK的下载安装以及配置
  6. js获取n天后的日期
  7. 智能手机 - 黑科技
  8. java 鼠标点击按钮事件_Java 鼠标点击事件实例
  9. 树莓派播放音频时3.5mm接口没有声音怎么办?
  10. 考博英语题型及难度分析