POJ1094 Sorting It All Out 拓扑排序(深搜)

Sorting It All Out POJ - 1094 拓扑排序 (唯一拓扑序) 传送门题目大意: 给两个整数n, m, n表示从A到第n个字母, 然后给m个偏序关系, 求用到第几个偏序关系就可以求得唯一的拓扑序列,(注意: 是唯一的拓扑序列), 如果可以求得唯一拓扑序列, 则输出用到第几个偏序关系就可以求出, 并输出序列。如果不能确定唯一的拓扑序列, 输出要求的语句如果有矛盾的偏序关系, 输出从第几个开始的题目分析: 比较值得注意的就是唯一的拓扑序列, 我们知道, 偏序关系不... 阅读详情

题意:给定n和m,n表示大写字母的前n个,m表示m个关系对,求能否确定唯一排序。

分析:分三种情况

(1)当输入完当前的关系对之后,已经能确定矛盾(不需要完全输入m个关系对时)

eg. 3 3

      A<B

      B<A

        B<C

      当输入到第二对已经能判断矛盾,此时记下当前的所需要用到的关系对数ans=2;

      接着输入,但是后面的关系对不作处理

(2) 当输入完当前的关系对之后,已经能确定唯一排序(不需要完全输入m个关系对,

   但是必须n个字母必须都出现,此时后面即使的关系再有矛盾时也不管)

   eg. 4 4

 A<B

 C<D

 B<C

 D<C

当输入到第三对时已经确定唯一序列ABCD,记录此时用到的关系

对数ans=3,接着输入,但是后面的关系对不作处理,即使后面出现矛盾

(3)当所有的关系对数都输入后,还无法确定唯一序列或者矛盾,则说明序列不唯一

(必须输入所有序列)

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int g[30][30];
struct Node{
    int in;
    char c;
}node[30];
Node cpy[30];
bool cmp(Node a,Node b) {
    return a.in<b.in;
}
char s[30];
char p[30];
int mark[30];
int n,m,ans;
int stop()
{
    mark[s[0]-'A'+1]++;
    mark[s[2]-'A'+1]++;
    for(int i=1;i<=n;i++)
    {
        if(!mark[i]) return 0;
    }
    return 1;
}
int dfs(int d)              //深搜
{
    if(d>n) return 1;       //搜完n个点退出,(1)如果此时ans没被改变,说明n个点已经成功完成排序
    sort(node+d,node+1+n,cmp);
    if(node[d].in) {    //(3).如果入度为0的点,退出且返回0;
        return 0;
    }
    else{
        if(d<n&&!node[d+1].in) ans=-1;  //(2).如果有两个以上的点入度为0,ans=-1;
        p[d]=node[d].c;                 //排序后的字母放在p数组;
        for(int i=1;i<=n;i++) if(g[node[d].c-'A'+1][node[i].c-'A'+1]) node[i].in--;
        return dfs(d+1);
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF&&(m||n))
    {
        for(int i=1;i<=n;i++) {
            node[i].in=0;
            node[i].c='A'-1+i;
        }
        memset(g,0,sizeof(g));
        memset(mark,0,sizeof(mark));
        int k=0;
        int flag=-1;
        for(int i=1;i<=m;i++){
            scanf("%s",s);
            if(flag==0||(k&&ans>0)) continue;//如果之前已经发现矛盾,或者已经完成排序,只输入不进行其他操作
            if(!g[s[0]-'A'+1][s[2]-'A'+1]) node[s[2]-'A'+1].in++;
            g[s[0]-'A'+1][s[2]-'A'+1]=1;//标记边,下次出现此边时不更新点
            ans=0;
            if(!k) k=stop();            //判断所有点是否都出现过
            for(int j=1;j<=n;j++){      //备份点
                cpy[j].c=node[j].c;
                cpy[j].in=node[j].in;
            }
            flag=dfs(1);                //深搜
            for(int j=1;j<=n;j++){      //还原点
                node[j].c=cpy[j].c;
                node[j].in=cpy[j].in;
            }
            if(flag==0) ans=i;    //第三种情况(矛盾),记下此时的用到的关系对ans是第几对(用于输出)
            else if(flag&&ans!=-1) ans=i;//第一种情况(完成排序),记下此时的用到的关系对ans是第几对(用于输出)
        }
        p[n+1]='\0';
        if(flag&&ans==-1) printf("Sorted sequence cannot be determined.\n");
        else if(!flag) printf("Inconsistency found after %d relations.\n",ans);
        else if(flag) printf("Sorted sequence determined after %d relations: %s.\n",ans,p+1);
    }
}

Power Automate实战:用SharePoint REST API批量处理列表数据(附JSON解析技巧) 本文深入探讨了如何利用Power Automate调用SharePoint REST API实现列表数据的批量自动化处理。文章详细解析了API的协同工作原理、高效的数据获取与筛选技巧,并重点分享了JSON数据解析的核心难点与实战解决方案,旨在帮助企业用户构建稳定可靠的数据处理流程,提升运营效率。 阅读详情

相关推荐

MTK Sensor驱动调试实战:从AP到SCP的完整流程解析

本文详细解析了MTK平台Sensor驱动从AP侧到SCP侧的完整调试流程。内容涵盖AP侧驱动集成、DTS配置、内核编译与验证,以及SCP侧Tinysys框架下的代码集成、Overlay配置与I2C设置等核心步骤,并分享了中断唤醒、功耗优化及传感器数据校准等实战经验与常见问题排查方法,为硬件驱动工程师提供了一份全面的实战指南。

weixin_29175469的博客 353

poj1094 好一个拓扑排序

/* 拓扑排序,注意一些变态的例子 1.该字母序列有序,并依次输出; 2.该序列不能判断是否有序; 3.该序列字母次序之间有矛盾,即有环存在。 而这三种形式的判断是有顺序的:先判断是否有环(3),再判断是否有序(1),最后才能判断是否能得出结果(2)。 注意:对于(2)必须遍历完整个图,而(1)和(3)一旦得出结果,对后面的输入就不用做处理了。 */ #include #include using

小堃哥的专栏 500

单相PWM整流器四象限运行原理

简述单相PWM整流器四象限运行原理。

m0_75208156的博客 8301

拓扑排序(深搜实现)

这里给大家介绍另外一种拓扑排序,这种是基于深搜实现的。 上图: 如果我们按照节点编号顺序从节点0开始深度优先搜索,就会得到下面这个序列。 5,6,3,2,8,7,0,4,1 把这个序列逆置一下,就会发现这是一个正确的拓扑序列。(可以好好想一下这个结论,我当时想了很久) 1,4,0,7,8,2,3,6,5 贴代码 #include&amp;amp;amp;lt;vector&amp;amp;amp;gt; #include&amp;amp;amp;lt;iostre

qq_26760433的博客 1602

AutoCAD Plant 3D自定义零件库实战:手把手教你用Python创建参数化槽式三通

本文详细介绍了如何利用Python脚本在AutoCAD Plant 3D中创建参数化槽式三通组件,从API原理到实战开发,帮助用户构建高效的自定义零件库。通过Python装饰器系统控制零件属性和行为,实现几何建模、参数管理和规格编辑器集成,提升工业管道设计的标准化和效率。

weixin_28267011的博客 331

百度新闻评论内容抓取

通过抓包分析发现,百家号手机app端文章评论内容接口为:https://ext.baidu.com/api/comment/v1/comment/getlist?appid=101&sid=1008524_2-1010050_1-1007549_23033-1007550_23035&cuid=01B5EAF73E8A83BB842BE04E4FB6C656|23200201047...

codingforhaifeng的博客 2422

深搜 拓扑排序

算法竞赛入门经典中深搜拓扑排序的实现 #include #include #define maxn 20 int vis[maxn]; int topo[maxn]; int t, n; int adj[maxn][maxn]; int dfs(int u){ int v; vis[u] = -1; for(int v = 1; v <= n; ++v){

812

【数据集处理】基于ERA5 气温/湿度数据计算湿球温度并判别湿热浪

【数据集处理】基于ERA5 气温/湿度数据计算湿球温度并判别湿热浪

WW、forever的博客 487

拓扑排序题集

【HDU】 1285 确定比赛名次 2094 产生冠军 2647 Reward 3342 Legal or Not 1811 Rank of Tetris  拓扑+并查集 3231 Box Relations 三维拓扑 ================================================================= 【POJ】 1094

夏天的风 7192

【Cmder】--- Windows11 配置CMD神器 (超详细 持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1万+

扣子Coze工作流教程:采集公众号爆文,一键仿写自动发布

通过本教程,你学会了如何利用扣子(Coze)平台构建一个完整的公众号文章自动处理工作流。这个系统不仅能够大幅提升内容产出效率,还能通过AI二创保持内容新鲜度和原创性。最佳实践建议:初次使用时,建议先保存为草稿而不是直接发布,以便人工审核;从简单的工作流开始,逐步增加复杂度;定期检查工作流运行日志,优化节点配置。自动化内容创作是新媒体运营的未来趋势,掌握这项技能将使你在数字内容领域占据显著优势。

互联网架构师笔记 1238

poj1094 拓扑排序

http://poj.org/problem?id=1094 Description An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to larges

ACM,再见! 1200

UG NX二次开发(C#)-读取PMI对象的名称

摘要:本文介绍了在UG NX中通过NXOpen获取PMI对象名称的方法。首先说明PMI对象初始无名称,可通过重命名或属性设置名称。然后提供C#代码示例,展示如何遍历PMI集合获取对象名称,并显示名称和类型信息。适用于需要操作PMI对象的开发人员,欢迎加入技术交流QQ群749492565。(99字)

GimiGimmy 592

poj 1094 Sorting It All Out(拓扑排序)

http://poj.org/problem?id=1094 拓扑排序,有点坑。。 给出m个关系,在输入的同时判断在当前条件下是否有环,是否能形成唯一拓扑序列,或者是不确定。 此题要注意优先级,当在输入的过程中出现环或拓扑排序成功时可以直接输出,但当前驱结点不唯一时不能直接输出,因为后面的输入可能导致出现环,这时候就应该输出矛盾而不是拓扑序列不唯一了,所以判拓扑序列不唯一时应放在输入完毕

2058

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

POJ 1094 Sorting It All Out 拓扑排序

POJ 1094 Sorting It All Out 大意:给定A<B B<C形式关系若干,问能否构成严格的从小到大的排序 有许多坑点,首先,输出有三种形式: 在第x组序列给出时可以构成严格的排序abcd… 在第x组序列给出时出现矛盾 不能确定排序的序列 前两者的优先级高于第三者 我们每输入一组关系,都进行一次拓扑排序,判断关系是能严格排序,出现矛盾,还是不确定,一旦这组关系是严...

菜鸡的博客 162

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POJ 1094 Sorting It All Out(拓扑排序·判断+实现)

题意  由一些不同元素组成的升序序列是可以用若干个小于号将所有的元素按从小到大的顺序 排列起来的序列。例如,排序后的序列为 A, B, C, D,这意味着 A 每来一个小于关系就进行一次拓扑排序  直到出现冲突(也就是出现了环)或者已经能确定顺序  当结果已经确定时  后面的小于关系也就没有必要处理了  因此可以用一个flag标记结果是否已经确定 #include #include #i

Deng's site \# 2353

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Poj 1094 Sorting It All Out——拓扑排序

题目链接: http://poj.org/problem?id=1094 题目大意: 这个题目的难点就在于题目意思的理解。 有n个大写字母,并且告诉这n个大写字母的大小关系,要你对这n个大写字母进行排序。 解题思路: 但是,这个题目并不是等所有的输入结束之后判断,而是一边输入一边进行判断。 每次输入一组字母的关系之后,我们就需要更新原来的图。 如果原来的

sanmingzi3344的专栏 797

G - Sorting It All Out POJ - 1094

G - Sorting It All Out  POJ - 1094  An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For exam...

nucleare的博客 276

poj 1094 Sorting It All Out 拓扑排序

题目:http://poj.org/problem?id=1094 题意:给定n个字母,和m个它们之间的偏序关系,判断是否可以排成一个全序序列,在第几条关系后能得出全序序列,或者得出有矛盾。否则最后输出无法判断 思路:拓扑排序,如果有环肯定无法排成全序序列。进行拓扑排序时,每次只能有一个点入度为0,否则无法判断。 #include #include #include #include

弱智就要多努力 495

Sorting It All Out (POJ - 1094 ,拓扑排序 + 链式向前星存图)

一.题目链接: POJ-1094 二.题目大意: 给出 n,m. 字母由 A 到 A + n. 给出 m 个关系,形式如:A<B. 输入结束后 若字母顺序已确定,则输出 "Sorted sequence determined after 最少步数relations: 字母顺序." 若有矛盾,则输出 "Inconsistency found after 最小步数relati...

The___Flash的博客 889

poj1094Sorting It All Out——拓扑排序

题目:http://poj.org/problem?id=1094 看到此题,首先觉得这是一种层层递进的关系,所以可以想到用拓扑排序; 就像人工排序,每次需要找到一个最小的,再找到新的最小的……所以用有向边代表小的元素到大的元素的关系,每次的入度为0的点就是最小的; 出现错误也就是出现了环,可以看做是拓扑排序过程后还有没有被排到的点,也就是怎样入度都不为0; 因为要输出哪一步,所...

aodan5477的博客 117

POJ 1094 Sorting It All Out【拓扑排序】

题目链接: http://poj.org/problem?id=1094 题意: 给定前n个字母的大小关系,问你是否 根据前xxx个关系得到上升序列 所有关系都无法确定唯一的一个序列 第xxx个关系导致出现环 分析: 此题坑略多。。。。 m大小没给!!这个很无语啊。。。数组开大点马上AC了。。。 无法确定序列必须最后判断。 一旦可以判断出上升序...

An55511的博客 131

POJ-1094 Sorting It All Out 解题报告

Description An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequenc

岁月流风、、 1432

POJ 1094-Sorting It All Out 拓扑排序

<br />题目来源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1094<br /> <br />解题报告:<br /> <br />每添加一条边,就检查一次是否可以对排序顺序进行确定。<br /> <br />每一次检查时,对已形成的图进行深搜,如果在深搜时遇到了灰色结点,就说明图中存在反边,即Inconsistency found;深搜的同时将结点按照访问结束的顺序放入队列Q1中,最后获得的Q1就是拓扑排序的结果,设为ABCD...,如果对队列中的连续的亮

kindlucy的专栏 743

【原】 POJ 1094 Sorting It All Out 拓扑排序 解题报告

http://poj.org/problem?id=1094 方法: 每加入一条边就进行一次拓扑排序,从而找到符合条件的最少边数 拓扑排序的基本思想就是依次找到图中入度为0的节点,将该节点和其对应的边删除,这样就使得它的邻接节点的入度-1。反复循环这样做直到所有节点都从图中删除(都被编上拓扑编号),或者因为有环所以还剩下某些节点未被删除 Descrip...

ajiaxi111111的博客 203

poj 1094 Sorting It All Out (拓扑排序)

http://poj.org/problem?id=1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000K Total Submissions:24505 Accepted:8487 Description An ascending sorted ...

diansitao5461的博客 119
上一篇: Asteroids
下一篇: OO’s Sequence 2015多校联合1001
sin_XF
博客等级 码龄12年 12粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值