POJ 1094 Sorting It All Out(topsort Language: Sorting It All Out Time Limit: 1000MS Memory Limit: )

掌握拓扑排序算法:POJ1094实践指南 简介:拓扑排序是处理有向无环图(DAG)中顶点依赖关系的排序方法,在数据结构和算法中有着重要应用。POJ1094题目要求实现一个拓扑排序的解决方案,涵盖了算法的步骤和数据结构的使用。本文将引导读者通过POJ1094实践,理解如何构建邻接表,计算入度,并运用DFS或BFS方法完成拓扑排序,并处理可能遇到的环路问题。 阅读详情

Language:
Sorting It All Out
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 28241 Accepted: 9757

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 sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.

Input

Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character "<" and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input.

Output

For each problem instance, output consists of one line. This line should be one of the following three: 

Sorted sequence determined after xxx relations: yyy...y. 
Sorted sequence cannot be determined. 
Inconsistency found after xxx relations. 

where xxx is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy...y is the sorted, ascending sequence. 

Sample Input

4 6
A<B
A<C
B<C
C<D
B<D
A<B
3 2
A<B
B<A
26 1
A<Z
0 0

Sample Output

Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.

Source




解释在代码中:


#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<stack>
using namespace std;

#define N 300

int a[N][N],d[N];
int ans[N];
int n,m;

int topsort()
{
	int i,j=0;
	int in[N];
	memcpy(in,d,sizeof(d));      //注意把入度复制到另外一个数组
    stack<int>q;

	for(i=1;i<=n;i++)
		if(in[i]==0)
		q.push(i);

	int x,flag=0;

	while(!q.empty())
	{
      if(q.size()>1) flag=1;
	  x=q.top();
	  q.pop();
	  ans[j++]=x;

	  for(i=1;i<=n;i++)
		if(a[x][i])
	  {
	  	if(--in[i]==0)
			q.push(i);
	  }
	}
	if(j!=n) return 2;
	if(flag) return 0;
	return 1;

}

void print()
{
	int i;
	for(i=0;i<n;i++)
		printf("%c",ans[i]+'A'-1);
	printf(".\n");
}



int main()
{
    int i,j,yes,cut;
    char x,y;
    while(scanf("%d%d",&n,&m),n+m)
	{

        getchar();

	    memset(a,0,sizeof(a));
		memset(d,0,sizeof(d));
        yes=0;
		for(i=1;i<=m;i++)
		{
			scanf("%c<%c",&x,&y);
			getchar();

			if(a[x-'A'+1][y-'A'+1])
               	continue;

            if(yes) continue;

		    a[x-'A'+1][y-'A'+1]=1;
			d[y-'A'+1]++;
			yes=topsort();
			if(yes)
				cut=i;

		}

		 if(yes==1)
			{
				printf("Sorted sequence determined after %d relations: ",cut);
				print();
			}
            else
				if(yes==2)
			{
				printf("Inconsistency found after %d relations.\n",cut);
				i=n+1;
			}
			else
            if(yes==0)
				printf("Sorted sequence cannot be determined.\n");
	}
	return 0;
}





poj1094 拓扑排序 NULL 博文链接:https://200830740306.iteye.com/blog/603488 立即下载

相关推荐

小智AI语音控制实战:从工具注册到音量调节的MCP交互全流程

本文详细拆解了基于小智AI与MCP协议实现本地智能语音控制的完整交互流程。以ESP32平台为例,从开发环境搭建、MCP服务器初始化、工具注册,到用户语音指令的接收、解析、硬件执行与结果反馈,提供了全链路实战代码。重点阐述了如何通过MCP协议将AI的意图理解与设备功能执行在本地高效耦合,实现毫秒级响应的音量调节等控制,为嵌入式AI开发者提供了清晰的实现路径。

weixin_29165725的博客 347

POJ 1094 (传递闭包 + 拓扑排序)

题目链接: POJ 1094 题目大意:有 1 ~ N 个大写字母,且从 A 开始依次 N 个。再给你 M 个小于的关系,比如 A < B ,让你判断三种可能: 1、在第 i 个关系罗列之后,是否可以满足使得这 N 个字母能递增关系。 2、在第 i 个罗列之后,是否会出现矛盾,例如 A > B,而在第 i 个状态出现后,B > A ,故矛盾。 3、如果 M...

diefen9380的博客 394

带有验证码的爆破(包含Burp suite工具爆破)

关于含有验证码爆破的一些总结!

weixin_43960066的博客 8692

POJ 1094

 说明:代码学习于优秀的网友,注释是我写的  ,如果哪里有错误  ,欢迎指正 POJ 1094:题意:有一些未知数各不相等,给出一些两两比较的大小关系,问到第几个关系开始可以确定整体排序或出现矛盾,再或者所有关系都用过了也无法确定整体排序。 拓扑排序 的思想: 从图中取一个没有前驱的顶点输出,  从有向图中删去此顶点以及所有以它为尾的弧 。 要求是有向无环图,图中顶点是线性排列关

phperHe 488

STM32_DAC

DAC(Digital-to-Analog Converter,数模转换器)是将数字信号转换为模拟信号的外设,广泛应用于音频输出、波形生成、电机控制等场景。STM32F407 系列芯片配备了 2 个 DAC 通道(DAC1 和 DAC2),支持 12 位分辨率,支持多种触发方式,可输出稳定的模拟电压。本文从 DAC 的基本原理出发,详细讲解 STM32F407 DAC 的配置方法、代码实现、波形生成以及实际应用案例,帮助你快速掌握 DAC 的使用技巧。

轩宇的博客 1239

STM32单片机入门学习(六)-光敏传感器控制LED

光敏传感模块一DO端接B13,GND接GND,VCC接VCC,AO不接。LED负极接B12,正极接VCC。

指尖魔法师 4368

poj 1094

Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22726   Accepted: 7859 Description An ascending sorted sequence of distinct values is one

sdjzujxc的专栏 1060

新能源汽车电池及充电原理详解

本文详细介绍了新能源汽车的电池包结构、铅酸电池充放电原理,以及交流和直流充电的工作原理和优缺点。内容涵盖电池串联并联原因、充电设备如车载充电机、交流充电桩和直流充电桩的介绍,以及不同充电模式的连接方式。通过对充电过程的深入探讨,有助于读者理解新能源汽车的充电技术。

让你爱上电路设计 4525

POJ1094(拓扑排序)

POJ1094(拓扑排序) 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 sequence A, B, C, D implies that

shui2104的博客 368

安卓手机强制清理数据恢复出厂设置后无法设置密码怎么办?(分享亲身经历的有效解决方案)

📱安卓手机强制清数据恢复出厂设置后,竟无法设置锁屏密码!本文将解析问题根源,分享亲测有效的解决方案,帮你快速摆脱困扰🎉

XiaoqiangClub的博客 240

Scratch全攻略:从入门到实践的编程之旅

Scratch 是一款由麻省理工学院(MIT)开发的图形化编程工具 ,它诞生的初衷是为了让编程教育更加普及,尤其是让孩子们能够轻松接触和学习编程。与传统的基于文本代码的编程方式不同,Scratch 通过将编程指令以图形化的积木形式呈现,极大地降低了编程的门槛,让编程变得如同搭积木一样简单有趣。

邓邓子的博客 1万+

POJ1094Sorting It All Out题解

有环的优先级大于无序的优先级。

weixin_42178241的博客 276

二、CANdelaStudio入门-版本介绍

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的各个版本,欢迎各位朋友订阅、评论,可以提出宝贵意见,以持续输出更好的作品,同时会根据评论、私信不定期更新文章内容,以及专栏目录。订阅该专栏的朋友可私信小编免费答疑解惑(^U^)ノ~YOCANdelaStudio——诊断需求定义工具,诊断协议开发软件 ①用户以模板概念为导向

诊断协议那些事儿's blog 1308

POJ - 1094 Sorting It All Out(传递闭包)

POJ - 1094 Sorting It All Out #include<cstdio> #include<cstring> const int N = 26; int n,m; bool d[N][N],st[N]; int check() { for(int i=0;i<n;i++) if(d[i][i]) return 2; for(int i=0;i<n;i++) for(int j=0;j<i;j++) if(!d[i][j

00后的博客 320

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

lwip-2.0.3

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

poj 1094 Sorting It All Out (拓补)

题目:http://poj.org/problem?id=1094 代码: View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int map[30][30]; 6 int de[30]; ...

weixin_34007879的博客 104

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

拓扑排序(poj1094)

拓扑排序是有向无环图(DAG)经常要执行的一种操作,依据这种操作可以得到该图的拓扑序列,当然这个拓扑序列有可能不是唯一的。它也可以看成是对一系列的偏序关系进行整合成新的偏序关系,有事可能组合成全偏序的序列。总体的思想是:将图中入度为0的点添加至队列,假设这样的点的数量为a。如果a=0;说明图中含有环或者说所有的点都遍历完全;如果a>1,说明图中的拓扑排序可能不止一种情况,但是它绝对不可能构成一个完全

start123_think的博客 426

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

poj -1094-拓扑排序

题解思路:循环暴力每次的拓扑排序就行。 代码:#include #include #include #include #include #include #include using namespace std; typedef long long ll; #define inf 0x3f3f3f3f const int mx = 26+5,mod = 1e9+7; int n,m,in

过路人丶的博客 371

【题解】poj1094 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 s...

翻过这座山,他们就会听到你的故事 422

POJ 1094(拓扑排序)

拓排+各种判…… Program P1094; type map3=record indegree:array['A'..'Z'] of longint; map:array['A'..'Z',1..26] of char; outdegree:array['A'..'Z'] of longint; end; var ...

爱.NET 236

poj-1094Sorting It All Out

题意: 给出关系,询问当可以确定(关系错误,关系正确,无法判断)时候,进行按要求输出 思路: 拓补排序,注意有环的情况,如最后的注释 代码是copy的自己写的时候总是处理不好环,下次按着这个写 #include #include #include #include #include using namespace std; int n,m,cnt,f,arr[26],map

GameRoad 306

poj-1094拓扑排序

拓扑排序的原理 很早就知道了 但是 这个很简单的拓扑排序题 却写了好久、、、、对于各种标记不是很明朗。 拓扑排序的原理: 在一个图中(有向图),存在入度为0的点,把该点去掉,并删除该点所在的边,再找入度为0 的点,直到所有的顶点全被确定一个顺序。如果过程中入度为0的点大于一个,说明拓扑序列不唯一。 拓扑排序的应用: 一个有向图,一些的节点必须在另一些节点前面,适用于要求有某种顺序的题 代

Usopp 688

poj 1094 拓扑排序(给不等式判断递增串)

题意:给出一些由字符表示的不等式,输出字符能够pail

dearmango 540

POJ 1094(拓扑排序)

题目链接:http://poj.org/problem?id=1094 题意:给出多组关系,判断能否组成唯一的拓扑排序。 思路: 判断三种情况: ①是否有环 ②是否有序(唯一性) ③能否组成拓扑排序 这题还是比较纠结的,应该先考虑是否唯一,然后判断能否形成拓扑排序,在考虑是否有序。 #include #include #include #include #include #incl

To be excellent! 362

poj1094(拓扑排序)

在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件: 1、每个顶点出现且只出现一次。 2、若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。 它是一个 D

qq_36386435的博客 795

POJ 1094 (拓扑排序)

这道题在我看来之所以采用拓扑排序,是因为数据所构成的图中存在环,而拓扑排序正好能巧妙解决这个问题, 再谈谈这个题的思想: 将两个节点构成的边存入一个图中,并且记录每一个节点的入度,进行拓扑排序: 将入度为0的节点先加入队列中,如果队列中节点数大于一,则说明存在节点无法判断其大小关系,取队首节点,并将该节点压入vector中,(因为要计算最后结果),删除队首节点,并删除与该节点相连接的节点...

兜率工的博客 602

poj_1094 拓扑排序

#include #include using namespace std; int map[27][27]; int indegree[27],queue[27]; int toposort(int n) { int flag=1,m,loc,count=0; int temp[27]; for (int i = 1; i <= n; i++) { temp[i] = inde

在路上的学习者 729
上一篇: HDU 1811 Rank of Tetris(topsort)
下一篇: HDU 1056 Largest Rectangle in a Histogram(dp)(求最大的矩形面积)
左眼皮跳跳~
博客等级 码龄13年 17粉丝 400原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值