zoukankan      html  css  js  c++  java
  • POJ-1094 Sorting it All Out

    一个字母,则入度加一,并把小的当成大的字母的一个的出度,如果有一个入度为0就输出,并把其其所有出度点减一个入度,循环n次,若一次循环出两个字母,则排序失败,但不跳出,因为一旦遇到了一次循环根本无法输出,则输入结束后输出Inconsistency found after t relations.,t为这条指令的序号(每输入一个指令就判断),当然,若当次就能判断顺序,我们就把t和输出顺序存下来,到最后再输出。

    注意:如果排序已经成功,则不用再管有没有回路的情况,若已存在回路的情况,则不再管排序能不能成功,所以,当已经存在回路或已经成功排序时就不用再做处理了。

    #include<iostream>
    using namespace std;
    int n,m,sh=0,a[1001]={0},t,c[10001]={0},b[101][101]={0},loc[1001]={0},d[10001]={0};
    int a1[10000001],b1[10000001];
    int main(){
    	string s;
    	while(cin>>n>>m&&n!=0&&m!=0){//只要还在输入
    	for(int i=1;i<=m;i++)
    	{
    	     cin>>s;、、输入指令
    	     if(s[1]=='>'){//如果中间的是大于
    		b[(s[0]-'A'+1)][0]++;
    		b[(s[0]-'A'+1)][b[(s[0]-'A'+1)][0]]=(s[2]-'A'+1);
    		b[(s[0]-'A'+1)][b[(s[0]-'A'+1)][0]]=i;
    		a[(s[2]-'A'+1)]++;
    		d[(s[2]-'A'+1)]++;
    	}
    	else {//如果中间的是小于
    			b[(s[2]-'A'+1)][0]++;
    		b[(s[2]-'A'+1)][b[s[2]-'A'+1][0]]=(s[0]-'A'+1);	
    		a[(s[0]-'A'+1)]++;
    		d[(s[0]-'A'+1)]++;	
    
    	}
    	if(sh==0&&z==0){//如果还没排出序而且还不存在回路,则进行模拟
    		bool panda=0;
    			for(int l=1;l<=n;l++){//要用其他东西存起来,不然排序失败就完了
    		c[l]=a[l];
    		}
    		int BS=0;
    	for(int s=1;s<=n;s++){
    		int ans=0;
    		for(int j=1;j<=n;j++){
    		 if(a[j]==0){
    		 	c[j]--;
    		 	BS++;//输出的字母的个数加1
    		 	ans++;
    		 	if(ans==2){//有多个入度为0的则排序失败,但还有继续排序
    		 	panda=1;
    			 }
    		 	loc[s]=j;//输出顺序
    		 	int k=b[j][0]; 
    		 	for(int t=1;t<=k;t++){
    		 	    c[b[j][t]]--;
    			 }
    		 }
    		 if(ans==2){
    		 panda=1;
    		 }
    	}
    			for(int l=1;l<=n;l++){
    		a[l]=c[l];
    		}
    	if(ans==0&&BS!=n){//如果不存在入度为0的点且还没有输出完,则存在回路
    		sh=2;
    		t=i;
    		panda=1;break;
    	}
    	else if(ans>=2){
    		panda=1;
    	} 
    }
    if(panda==0){//排序成功
    	if(z==0)
    	z=i;
    }
    }
    for(int ss=1;ss<=n;ss++){
    	a[ss]=c[ss]=d[ss];
    }
    }
    if(z!=0){//输出
    		cout<<"Sorted sequence determined after "<<z<<" relations: ";
    for(int ll=n;ll>=1;ll--)cout<<char(loc[ll]+'A'-1);
    cout<<"."<<endl;
    }
    else {
    if(sh==0)
    cout<<"Sorted sequence cannot be determined."<<endl;
    else if(sh==2)
    	cout<<"Inconsistency found after "<<t<<" relations."<<endl;
    }
    sh=0;z=0;
    for(int i=1;i<=26;i++){//清0
    	for(int j=0;j<=26;j++){
    		b[i][j]=e[i][j]=0;
    		vis[i][j]=0;
    	}
    }
    for(int t=1;t<=26;t++){
    a[t]=c[t]=d[t]=0;
    }
    }
    }

  • 相关阅读:
    JS Function Arguments
    C# CuttingEdge.Conditions 验证帮助类库 文档翻译
    JS AngualrJs 指令
    每日踩坑 2018-06-19 AutoMapper简单性能测试
    C# 集合类-使用
    工具 EZDML表结构设计器
    unittest的discover方法
    转:unittest的几种运行方式
    unittest学习5-断言
    unittest学习4-跳过用例执行
  • 原文地址:https://www.cnblogs.com/c201904xyorz/p/9990797.html
Copyright © 2011-2022 走看看