1 条题解

  • 0
    @ 2025-2-14 21:30:05

    C :

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    int c[26],ar[26];
    int map[26][26];
    int n,m,mark;
    void search(int i,int max,int count,int arr[])
    {
       	int j;
    	if(count==n&&mark==0)
    	{
            for(j=0;j<=max;j++)
    			ar[j]=arr[j];
    		mark=1;
    	}
    	else
    	{
    	  for(j=0;j<=max;j++)
    	  if(map[i][j]==1) 
    	  {
    		 arr[count]=j;
    	     search(j,max,count+1,arr);		   
    	  }
    	} 
    }
    int main()
    {
        int t,e,a,b,k,i,j,s,max,tag,loc;
    	int arr[26];
    	char ord[4];	
    	char al[26]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        while(scanf("%d%d",&n,&m)!=EOF&&m!=0&&n!=0)
    	{
    
    		  for(i=0;i<26;i++)
    			  memset(map[i],0,26*sizeof(int));
    		  memset(c,0,26*sizeof(int));
    		  memset(arr,0,26*sizeof(int));
    		  memset(ar,0,26*sizeof(int));
    	      for(mark=tag=max=i=0;i<m;i++)
    		  {
    		    scanf("%s",&ord);
                a=ord[0]-'A';b=ord[2]-'A';
                map[a][b]=1;
    			c[b]=1;
    			if(tag==0&&map[b][a]==1) 
    			{
    			       loc=i+1;
    				   tag=1;
    			}
    			if(b>max) max=b;
                if(a>max) max=a;
    			
    			if(tag==0) 
    			{
    				for(k=j=0;j<=max;j++)
    					if(c[j]==0) k++;
                   if(k==0)
    			   {
    				   loc=i+1;
    				   tag=1;
    			   }
    			}
    			if(max==n-1&&tag==0)
    			{
    			  for(j=0;j<=max;j++)
    				  if(c[j]==0) break;
    			  arr[0]=j;
    			  search(j,max,1,arr);
    			if(mark==1)
    			  {
    				loc=i+1;
    			    tag=2;
    			  }
    			}
    		  }
              if(tag==0) printf("Sorted sequence cannot be determined.\n");
    	      else if(tag==1) printf("Inconsistency found after %d relations.\n",loc);
    		  else
    		  {
    		        printf("Sorted sequence determined after %d relations: ",loc);
                	for(k=0;k<=max;k++)
    					printf("%c",al[ar[k]]);
    				printf(".\n");
    		  }
    	} 
    	return 0;
    }
    

    C++ :

    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<queue>
    using namespace std;
    
    int n,m,pi[26],vis[26];
    struct node
    {
    	vector<int> adj[26];
    	int indeg[26];
    }p;
    
    void add(node &N,int u,int v)
    {
    	N.adj[u].push_back(v);
    	N.indeg[v]++;
    }
    
    int toposort(node N)
    {
    	int count=0,i,k=0,vn=0,bj=0;
    	queue<int> q;
    	for(i=0;i<n;i++)
    	{
    		if(vis[i])
    		{
    			vn++;
    			if(!N.indeg[i])
    				q.push(i);
    		}
    	}
    	while(!q.empty())
    	{
    		count++;
    		int x=q.front();
    		q.pop();
    		pi[k++]=x;
    		if(!q.empty())
    			bj=1;
    		for(vector<int>::iterator it=N.adj[x].begin();it!=N.adj[x].end();it++)
    			if(!(--N.indeg[*it]))
    				q.push(*it);
    	}
    	if(vn==n)
    	{
    		if(count==n)
    		{
    			if(bj)
    				return -1;
    			else
    				return 1;
    		}
    		else
    			return 0;
    	}
    	else
    	{
    		if(count==vn)
    			return -1;
    		else
    			return 0;
    	}
    }
    
    int main()
    {
    	int i,u,v,flag;
    	char s[4];
    	while(scanf("%d%d",&n,&m)!=EOF,n||m)
    	{
    		flag=0;
    		for(i=0;i<26;i++)
    		{
    			p.adj[i].clear();
    			p.indeg[i]=0;
    		}
    		memset(vis,0,sizeof(vis));
    		for(i=0;i<m;i++)
    		{
    			scanf("%s",s);
    			u=s[0]-'A';
    			v=s[2]-'A';
    			vis[u]=vis[v]=1;
    			add(p,u,v);
    			if(!flag)
    			{
    				int t=toposort(p);
    				if(t==0)
    				{
    					printf("Inconsistency found after %d relations.\n",i+1);
    					flag=1;
    				}
    				else if(t==-1&&i==m-1)
    					printf("Sorted sequence cannot be determined.\n");
    				else if(t==1)
    				{
    					printf("Sorted sequence determined after %d relations: ",i+1);
    					for(int j=0;j<n;j++)
    						printf(j==n-1?"%c.\n":"%c",pi[j]+'A');
    					flag=1;
    				}
    			}
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    930
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者