uva 10305 - Ordering Tasks

本文详细介绍了拓扑排序算法的基本概念、实现方法及在实际问题中的应用案例,通过样例输入输出展示了如何解决任务依赖关系问题,帮助读者理解和掌握拓扑排序的实践技巧。

John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only possible if other tasks have already been executed.

Input

The input will consist of several instances of the problem. Each instance begins with a line containing two integers, 1 <= n <= 100and mn is the number of tasks (numbered from 1 to n) and m is the number of direct precedence relations between tasks. After this, there will be m lines with two integers i and j, representing the fact that task i must be executed before task j. An instance withn = m = 0 will finish the input.

Output

For each instance, print a line with n integers representing the tasks in a possible order of execution.

Sample Input

5 4
1 2
2 3
1 3
1 5
0 0

Sample Output

1 4 2 5 3

纯拓扑排序,我按着刘汝佳那个写的,哈哈学习了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 105
int topo[maxn],c[maxn],G[maxn][maxn],n,t;
bool dfs(int u){
     c[u]=-1; //-1表示正在访问中 
     for(int v=1;v<=n;v++)if(G[u][v])//查看是否存在关系 
     {
          if(c[v]<0)return false;
          if(!c[v]&&!dfs(v))return false;  
     } 
     c[u]=1;topo[--t]=u;//处理 
     return true;
}
bool toposort(){
     t=n;
     memset(c,0,sizeof(c));//初始化,0代表还未被访问 
     for(int i=1;i<=n;i++)
        if(!c[i]&&!dfs(i))return false;
     return true; 
}
int main(){
     int m,u,v;
     while(scanf("%d%d",&n,&m)==2&&(m||n)){
         memset(G,0,sizeof(G)); 
         for(int i=1;i<=m;i++){
             scanf("%d%d",&u,&v);
             G[u][v]=1; 
         }
         if(toposort()){//是否存在这样的拓扑排序,主要看有无有向环 
            for(int i=0;i<n-1;i++)printf("%d ",topo[i]);
            printf("%d\n",topo[n-1]); 
         } 
     }
     return 0;
}


### Pytest-ordering 插件概述 Pytest-ordering 是一个用于控制测试用例执行顺序的插件。该插件允许开发者通过简单的装饰器定义不同测试之间的相对顺序。 ### 安装方法 为了安装 pytest-ordering 插件,在终端中可以使用 `pip` 工具并运行如下命令: ```bash pip install pytest-ordering ``` 对于另一个类似的库 pytest-order,也可以采用相似的方式进行安装[^2]。 ### 使用教程 #### 控制测试用例执行顺序的方法 pytest-ordering 提供了几种不同的方式来设置测试用例的执行顺序。最常见的是利用带有参数的 `@pytest.mark.run()` 装饰器,其中 `order` 参数决定了具体的排列位置;数值越低表示优先级越高,意味着更早被执行。例如: ```python import pytest @pytest.mark.run(order=1) def test_first(): assert True, "This should run first" @pytest.mark.run(order=2) def test_second(): assert True, "This will follow the previous one" ``` 除了显式的数字排序外,还存在一些特殊的标记用来简化某些特定情况下的操作,比如让某个测试总是位于队列开头或结尾。不过需要注意的是,部分早期版本中存在的标签如 `first` 和 `last` 在较新的发行版里已被移除不再推荐使用[^4]。 #### 示例代码展示如何应用这些特性 下面给出了一组完整的例子说明怎样运用上述提到的功能点: ```python import pytest # 设置此测试最先执行 @pytest.mark.run(order=-2) def test_negative_order_example(): print("\nTest with negative order value.") pass # 正常按序号指定先后关系 @pytest.mark.run(order=1) def test_positive_order_one(): print("\nFirst ordered positive number.") pass @pytest.mark.run(order=3) def test_larger_than_default(): print("\nLargest defined position.") pass # 默认情况下未指明次序则放在最后处理 def test_without_explicit_order(): print("\nNo explicit ordering applied here.") pass # 小于零会被安排到非常靠前的位置 @pytest.mark.run(order=-1) def test_most_prioritized(): print("\nMost prioritized due to smallest integer used as its parameter.") pass ``` 当这段脚本被 pytest 执行时,输出会按照设定好的序列依次打印出来,从而验证了各个测试案例确实依照预期进行了编排。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值