POJ 1094 Sorting It All Out 【拓扑排序】
<题目链接>
题目大意:
对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用上之后依旧无法确定唯一的排序。
解题分析:
因为本题在确定发生冲突和能够确定唯一排序的时候要及时输出,所以必然是每输入一对关系,就进行一次拓扑排序来判断。然后判断冲突就是判断是否存在环,判断是否能够确定唯一排序就是在不存在环的情况下,同时任何时候都不存在多个入度为0点。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int N = ;
int ind[N],output[N];
bool g[N][N]; //临接矩阵此题可以随便用
int n,m,ans,loc;
bool circle,order; int topsort( int n ) {
queue<int>Q;
int inorder = true;
int num = ,temp[N];
memcpy(temp,ind,sizeof(ind)); //复制当前所有点的入度,防止下面的操作对其造成影响
for( int i = ; i < n; i++ ) { //将所有入度为0的点入队列
if( !ind[i] ) Q.push(i);
}
while( !Q.empty() ) {
if( Q.size() > )inorder = false; //判断是否存在同时有多个入度为0的点的情况
int cur = Q.front();Q.pop();
output[++num] = cur; //num计数 以存到out里面
for(int i = ; i < n; i++ )
if(g[cur][i]== && --temp[i] == )
Q.push(i);
}
if( num != n ) return ; //存在环,即发生冲突
if( !inorder ) return ; //不能确定唯一顺序
return -; //能够确定唯一顺序
}
int main(){
char s[];
while( scanf("%d%d", &n, &m) != EOF && n ){
circle=order=false;
memset(g,,sizeof(g));
memset(ind,,sizeof(ind));
for( int i = ; i <= m; i++ ){
scanf("%s", s);
if( !circle && !order ){ //已经产生冲突或者已经能够确定排序,就不用读入了
int u=s[]-'A',v=s[]-'A'; //注意这里,所有点的编号是从0~n-1
if(g[u][v] == ){
g[u][v] = ;ind[v]++;
}
ans = topsort(n);
if( ans == ){
circle = true;
printf("Inconsistency found after %d relations.\n", i);
}
else if( ans == - ){
order = true;
loc=i; //记录位置
}
}
}
if(!circle && !order ) //如果没有产生环,并且不能够确定唯一的顺序
printf("Sorted sequence cannot be determined.\n");
else if(order){ //能够确定唯一的顺序
printf("Sorted sequence determined after %d relations: ", loc);
for(int i=; i<=n; i++)printf("%c", output[i]+'A');puts(".");
}
}
}
2018-11-21
POJ 1094 Sorting It All Out 【拓扑排序】的更多相关文章
- ACM: poj 1094 Sorting It All Out - 拓扑排序
poj 1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & ...
- poj 1094 Sorting It All Out (拓扑排序)
http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- POJ 1094 Sorting It All Out (拓扑排序) - from lanshui_Yang
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- poj 1094 Sorting It All Out_拓扑排序
题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...
- POJ 1094 Sorting It All Out 拓扑排序 难度:0
http://poj.org/problem?id=1094 #include <cstdio> #include <cstring> #include <vector& ...
- PKU 1094 Sorting It All Out(拓扑排序)
题目大意:就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列. 是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出: 2.判断该序列是否唯一: 3.该序列字母次序之间 ...
- POJ 1094 Sorting It All Out(拓扑排序+判环+拓扑路径唯一性确定)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39602 Accepted: 13 ...
- [ACM] POJ 1094 Sorting It All Out (拓扑排序)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26801 Accepted: 92 ...
- POJ 1094:Sorting It All Out拓扑排序之我在这里挖了一个大大的坑
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29984 Accepted: 10 ...
随机推荐
- Confluence 6 针对站点维护使用只读模式
如果你需要对 Confluence 进行维护,但是 Confluence 还是在运行或者你计划将站点合并到一个新的站点,你可以将你的 Confluence 站点设置为只读模式来限制用户在你站点中可以使 ...
- Eclipse中部署Android开发环境插件安装问题方案
1.添加第一个插件ADT之后出现eclipse原有的SDK管理问题.需要重新安装SDK 2.一种方式按照系统提示直接联网自动搜索安装,另一种就是下载好之后import. 1.用接口声明的变量称为接口变 ...
- jQuery核心方法
1.$(document.body).css( "background", "black" ); 2.$(myForm.elements).hide():隐藏表 ...
- C++ Primer 笔记——拷贝控制
1.如果构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数的第一个参数必须是引用类型(否则会无限循环的调用拷贝构造函数). 2.如果没有为一个类 ...
- Ubuntu 进入、退出命令行的快捷键
进入: Ctrl+Alt+F1 退出: Ctrl+Alt+F7(或者 Alt+F7) 进入命令行窗口:Ctrl+Alt+T
- 步步为营-104-Lambda语句
1:Lambda的拼接 首先借助一个Lambda的帮助类 using System; using System.Collections.Generic; using System.Linq; usin ...
- 51Nod 1298 圆与三角形(计算几何)
1298 圆与三角形 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...
- 20165328 预备作业3 Linux安装及命令
Linux安装及学习 Linux安装遇到的问题: 问题:在我开始安装虚拟机的时候,在安装过程中总会出现初始界面,且无法跳过,陷入死循环. 解决方法:我在网上百度搜索该问题之后得到了答案,第一个界面是要 ...
- Win10 配置Tomcat与Java环境变量
一:下载JKD与Tomcat包 JDK 密码:d9ym Tomcat 密码:z9pa 二:安装JAVA-JDK与配置环境变量 ①:记住安装的地址 ②:配置JAVA-JDK的环境变量, ...
- dubbo的工作原理
dubbo工作原理 第一层:service层,接口层,给服务提供者和消费者来实现的 第二层:config层,配置层,主要是对dubbo进行各种配置的 第三层:proxy层,服务代理层,透明生成客户端的 ...