6-15 给任务排序 uva10305
拓扑排序的水题
有关dfs的很好的题
其中c数组的三个状态十分巧妙
还有各种bool的运用
储存答案的方式!!:ans[--t]=x;
因为dfs是先将所有的步骤全部进行完 最后开始疯狂 存答案 在这个dfs主程序进行的过程中遇到有向环 则退出
#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int m1[][];
int ans[];
int c[]; bool dfs(int x)
{
c[x]=-;
for(int j=;j<=n;j++)
if(m1[x][j])
{
if(c[j]<)return false;
else if(!c[j])dfs(j); }
c[x]=;
ans[--t]=x; return true; } bool ttt()
{
t=n;
for(int i=;i<=n;i++)
{
if(!c[i])
if(!dfs(i))return false; }
return true; } int main()
{ while(cin>>n>>m,n||m)
{
memset(m1,,sizeof(m1));
memset(c,,sizeof(c));
for(int i=;i<=m;i++)
{
int a,b;cin>>a>>b;
m1[a][b]=; }
if(ttt())
{
for(int i=;i<n;i++)
{
if(i==)printf("%d",ans[i]);else printf(" %d",ans[i]); }
printf("\n");
}
else printf("-1\n"); } return ;
}
上面的代码是不严谨的!!!
dfs函数里要改为
else if(!c[j]&&!dfs(j))return false;
否则dfs函数永远是true (在这题影响不大因为所有数据都是有效的)
6-15 给任务排序 uva10305的更多相关文章
- 拓扑排序--UVa10305
题目 Output: standard output Time Limit: 1 second Memory Limit: 32 MB John has n tasks to do. Unfortun ...
- 15、numpy——排序、条件刷选函数
NumPy 提供了多种排序的方法. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种排序算法的比较. 种类 速度 最坏情况 ...
- 《C#本质论》读书笔记(15)使用查询表达式的LINQ
15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable<string> sel ...
- PHP的几种排序算法的比较
这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 85 ...
- Github排序(转载)
目录 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 希尔排序 5. 归并排序 6. 快速排序 7. 堆排序 8. 计数排序 9. 桶排序 10. 基数排序 参考:https://mp.weix ...
- [转]Java学习---7大经典的排序算法总结实现
[原文]https://www.toutiao.com/i6591634652274885128/ 常见排序算法总结与实现 本文使用Java实现这几种排序. 以下是对排序算法总体的介绍. 冒泡排序 比 ...
- java讲讲几种常见的排序算法
java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...
- 我的Java开发学习之旅------>Java经典排序算法之二分插入排序
一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比较, ...
- 矿Java开发学习之旅------>Java排序算法经典的二分法插入排序
一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为採用折半比較,就可以得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比較 ...
随机推荐
- HTTP协议(下午茶)
http://www.kancloud.cn/kancloud/tealeaf-http/43840 下午茶
- luogu P1084 疫情控制
传送门 首先,所有军队又要尽量往上走,这样才能尽可能的封锁更多的到叶子的路径 而随着时间的增加,能封锁的路径也就越来越多,所以可以二分最终的时间 然后对于每个时间,就让能走到根的军队走到根,记录到根上 ...
- luogu P2051 [AHOI2009]中国象棋
统计方案,果断 dp 注意到合法方案即为每一行,每一列的棋子数不超过2 设\(f_{i,j,k}\)表示放到第\(i\)行,有\(j\)列可以放2个,有\(k\)列可以放1个的方案 然后就随便讨论一下 ...
- k8s系列~mgr的应用
一 简介:今天咱们大体介绍下 这两者是如何联系的二 概念解析 pod:说下我的理解 1 pod通过yaml文件来封装docker本身+启动形式 2 pod可以运行多个docke ...
- keepalived高可用系列~通用基础
简介:今天咱们来聊聊keepalived一 keepalived 架构 1 标准架构: keepalived+lvs/haproxy+后端 real server(mysql从库,nginx.myc ...
- 数据库操作之整合Mybaties和事务讲解 5节课
1.SpringBoot2.x持久化数据方式介绍 简介:介绍近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库 开发流程麻烦 ...
- C++11 多线程编程
http://blog.csdn.net/column/details/ccia.html?&page=1
- 允许远程用户登录访问mysql的方法
需要手动增加可以远程访问数据库的用户. 方法一.本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项 ...
- phantomjs 截取twitter的网页(动态生成的页面)
// This example shows how to render pages that perform AJAX calls// upon page load.//// Instead of w ...
- expdp和impdp快速导出导入,不用创建虚拟目录
expdp 和impdp不用创建虚拟目录:在cmd直接 expdp 用户名/密码 回车 就导出了,(如果提示输入用户名和密码就输入).再将导出的文件放在oracle默认的dpdump文件夹里面,然 ...