zoukankan      html  css  js  c++  java
  • POJ 1094 Sorting It All Out(topsort Language: Sorting It All Out Time Limit: 1000MS Memory Limit: )

    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(".
    ");
    }
    
    
    
    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.
    ",cut);
    				i=n+1;
    			}
    			else
                if(yes==0)
    				printf("Sorted sequence cannot be determined.
    ");
    	}
    	return 0;
    }
    





  • 相关阅读:
    JQuery
    如何垂直居中一个浮动元素
    Bootstrap概述
    浮动元素的水平居中
    图(Prime算法、 Kruskal算法、Dijkstra算法、Floyd算法、AOV网)
    排序(插入排序、选择排序、交换排序、二路归并排序、基数排序、外部排序)
    实验二 Scala编程初级实践
    数据类型、运算符
    用栈求前缀表达式值
    用栈求后缀表达式地的值
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6900181.html
Copyright © 2011-2022 走看看