Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

拓扑排序 0ms~~

Posted by OZY123 at 2016-06-26 11:03:10 on Problem 1094
#include<cstdio>
#include<cstring>
const int N=30;
int n,m;
char str[5];
struct qq
{
	int y;
	int last;
}s[N*N];
int last[N],num;
int ttt[N];
void init (int x,int y)
{
	num++;
	ttt[y]++;
	s[num].y=y;
	s[num].last=last[x];
	last[x]=num;
	return ;
}
int cnt,top[N];
int tt[N];
int ooo;//这一次有多少个元素进栈
//假如ooo每一次都是1,那么说明已经有序了
int q[N],num1;//假如有序则记录路径 
int solve ()
{
	cnt=0;ooo=0;num1=0; 
	for (int u=1;u<=n;u++) tt[u]=ttt[u];
	for (int u=1;u<=n;u++)
		if (tt[u]==0)
		{
			q[++num1]=u;
			top[++cnt]=u;
			ooo++;
		}
	bool tf=true;//是否有序
	while (cnt>0)
	{
		int x=top[cnt--];
		if (ooo>1) tf=false;
		ooo=0;
		for (int u=last[x];u!=-1;u=s[u].last)
		{
			int y=s[u].y;
			tt[y]--;
			if (tt[y]==0)
			{
				q[++num1]=y;
				top[++cnt]=y;
				ooo++;
			}
		}
	}
	if (ooo>1) tf=false;
	if (num1!=n) return 0;
	if (tf==true) return 1;
	return 2;
}
void Ready()
{
	num=0;
	memset(last,-1,sizeof(last));
	memset(ttt,0,sizeof(ttt));
	return ;
}
int main()
{
	while (true)
	{
		scanf("%d%d",&n,&m);
		if (n==0&&m==0) break;
		Ready();
		bool ok=false;//是否已经出现过答案 
		for (int u=1;u<=m;u++)
		{
			scanf("%s",str);
			if (ok==true) continue;
			int a=str[0]-'A'+1,b=str[2]-'A'+1;
			init(a,b);
			int s=solve();
			if(s==0)//有环
            {
                printf("Inconsistency found after %d relations.\n",u);
                ok=true;
            }
            if(s==1)//有序
            {
                printf("Sorted sequence determined after %d relations: ",u);
                for(int j=1;j<=n;j++)
                    printf("%c",q[j]+'A'-1);
                printf(".\n");
                ok=true;
            }
		}
		if (ok==false)
			printf("Sorted sequence cannot be determined.\n");
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator