POJ 1094 C++:Sorting It All Out

原创 2017年01月03日 12:43:47

思路:

拓扑排序的思想,比较麻烦的一点是没输入一行关系就需要调用函数判断一次,每次找到入度为0的点,如果没有这样的点,那么说明存在环,如果有多个,无法判断关系但是还可能是存在环,找到入度为0的一个点之后,删除这个点和它所连接的边,注意:每次只能删除一个点,如果一次删除多个点,那么flag可能一直为0,无法判断flag=3的情况。反例:A<B  A<C,
#include <stdio.h>
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int m,n;
int a[30][30];
queue<int> res;
int judge(){
	
	queue<int>  re;
	int in[30]={0};
	int aa[30][30];
	memcpy(aa,a,sizeof(a));
	int i,k,j;
	for(i=0;i<m;i++){
		for(k=0;k<m;k++){
			if(aa[i][k]==1){
				in[k]++;
			}

		}
	}
	int flag=0;
	for(k=0;k<m;){
		
		int count=0;
		for(i=0;i<m;i++){
			if(in[i]==0)count++;
		}
		if(count==0)return 2;
		if(count>1)flag=3;
		for(i=0;i<m;i++){
			if(in[i]==0){
				k++;
				re.push(i);
				for(j=0;j<m;j++){
					if(aa[i][j]){
						aa[i][j]=0;
						in[j]--;
					}
				}
				in[i]=-1;
				break;
			}
		}
	}
	if(flag!=3){
		res=re;
		return 1;
	}
	else return 3;

}
int main(){
	while(cin>>m>>n){
		if(m==0&&n==0)break;
        memset(a,0,sizeof(a));
		int i,j,flag=0;
		char r,l;
		for(i=0;i<n;i++){
			cin>>r>>l>>l;
			a[r-'A'][l-'A']=1;
			if(flag==1||flag==2)continue;
			flag=judge();
			if(flag==1){
				cout<<"Sorted sequence determined after "<<i+1<<" relations: ";
				while(!res.empty()){
					int t=res.front();
					res.pop();
					cout<<(char)('A'+t);
				}
				cout<<"."<<endl;
         

			}
			if(flag==2)cout<<"Inconsistency found after "<<i+1<<" relations."<<endl;
			
		}
        if(flag==3)cout<<"Sorted sequence cannot be determined."<<endl;
	}
	return 0;
}


版权声明:本文为博主原创文章,转载请注明出处

[poj1094]拓扑排序经典例题

Sorting It All OutTime Limit: 1000MS Memory Limit: 10000K Total Submissions: 34710 Acce...
  • youhavepeople
  • youhavepeople
  • 2017年03月28日 14:41
  • 1394

POJ1274:The Perfect Stall(二分图最大匹配 匈牙利算法)

The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17895   Accepte...
  • u013487051
  • u013487051
  • 2014年07月10日 15:33
  • 1256

Android ANR问题原因分析

自己处理ANR问题单的一点经验,希望能对大家有帮助。
  • sinat_22657459
  • sinat_22657459
  • 2016年10月10日 19:11
  • 7549

Sorting It All Out poj 1094(判断严格小于关系&判断是否有环)

Sorting It All Out An ascending sorted sequence of distinct values is one in which some form ...
  • codeswarrior
  • codeswarrior
  • 2017年11月24日 13:06
  • 80

POJ 1094-Sorting It All Out(元素大小关系-拓扑排序)

Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3263...
  • MIKASA3
  • MIKASA3
  • 2016年07月30日 11:48
  • 397

poj 图相关之1094Sorting It All Out

poj 图相关之1094Sorting It All Out Accepted 144K 0MS 测试数据
  • ziqi9216
  • ziqi9216
  • 2017年06月25日 11:09
  • 103

(POJ 1094)Sorting It All Out top序列 floyd判环

Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33760 Ac...
  • STILLxjy
  • STILLxjy
  • 2016年11月16日 19:10
  • 191

[POJ 1094]Sorting It All Out[拓扑排序]

题目链接:[POJ 1094]Sorting It All Out[拓扑排序] 题意分析: 给出字母表中的前N个大写字母和它们之间的M个比较关系,问:从哪句话起能够确定所有关系?或者从哪句话起出现...
  • CatGlory
  • CatGlory
  • 2016年01月20日 00:53
  • 279

拓扑排序 附POJ 1094 Sorting It All Out 解题报告

拓扑排序是针对有向无环图的概念,通常是用于将一些点进行拓扑排序之后形成一个序列能够形成先后的关系,所以拓扑排序可以用于解决点之间又先后关系的序列。         POJ1094这道题是说给你一些大...
  • geniusluzh
  • geniusluzh
  • 2011年09月01日 01:26
  • 1348

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

链接: http://poj.org/problem?id=1094 题目: Sorting It All Out Time Limit: 1000MS ...
  • shuangde800
  • shuangde800
  • 2012年09月08日 10:04
  • 2369
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1094 C++:Sorting It All Out
举报原因:
原因补充:

(最多只允许输入30个字)