当前位置:编程学习 > C/C++ >>

九度OJ 教程82 拓扑排序之《产生冠军》

 
[csharp]  
//九度OJ 教程82 拓扑排序之《产生冠军》  
//http://ac.jobdu.com/problem.php?cid=1040&pid=81  
#include<stdio.h>  
#include<string.h>  
#define MAXS 1002  
char name[MAXS][40];  
int count;  
int findnum(char *h)  
{  
    int i,j,k,flag=1;  
    for(i=1;i<count&&flag;i++)  
    {  
        if(strcmp(name[i],h)==0)flag=0;  
    }  
    if(flag==0)return (i-1);  
    else   
    {  
        strcpy(name[count++],h);  
        return (count-1);  
    }  
}  
int main()  
{  
    char h1[40],h2[40];  
    int a,b,i,j,n,mark[MAXS][MAXS],sum;  
    while(~scanf("%d",&n)&&n)  
    {  
        count=1;  
        memset(mark,0,MAXS*MAXS*sizeof(int));  
        while(n--)  
        {  
            scanf("%s %s",h1,h2);  
            a=findnum(h1);  
            b=findnum(h2);  
            mark[a][b]=1;  
            mark[0][b]++;//mark[0][k]表示第k位选手被击败的次数。  
        }//while  
        for(i=1,sum=0;i<count;i++)if(mark[0][i]==0)sum++;  
        if(sum==1)printf("Yes\n");  
        else printf("No\n");  
    }  
    return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,