zoukankan      html  css  js  c++  java
  • codeforces 510c (拓扑排序)

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <queue>
    using namespace std;
    const int N = 111111;
    
    int topo[205];
    struct node
    {
        char a[105];
    }e[105];
    
    int n;
    int g[30][30];
    int f[30];
    int main()
    {
        scanf("%d",&n);
        int i,j;
        for(i = 0; i < n; i++)
        {
            scanf("%s",e[i].a);
        }
        memset(f,0,sizeof(f));
        memset(g,0,sizeof(g));
        for(i = 1; i < n;i++)
        {
            int l1 = strlen( e[i].a);
            int l2 = strlen(e[i-1].a);
            for(j = 0; j < l1&& j < l2; j++)
            {
                if(e[i].a[j] != e[i-1].a[j])
                {
                    int x = e[i].a[j] - 'a';
                    int y = e[i-1].a[j] - 'a';
                    if(g[x][y] == 0)
                    f[y]++;
                    g[x][y] = 1;
    
                    break;
                }
            }
            if(l1 < l2 && j == l1)
            {
                printf("Impossible
    ");
                return 0;
            }
        }
        queue<int> q;
        for(i = 0; i < 26; i++)
        {
            if(f[i] == 0)
            {
                q.push(i);
            }
        }
        int cnt = 0;
        while(!q.empty())
        {
            int w = q.front();
            q.pop();
            topo[cnt++] = w;
            for(i = 0; i < 26; i++)
            {
                if(g[w][i] == 1)
                {
                    f[i]--;
                    if(f[i] == 0)
                        q.push(i);
                }
            }
        }
        if(cnt != 26)
        {
            printf("Impossible
    ");
            return 0;
        }
        for(i = cnt-1; i >=0; i--)
        {
            printf("%c",topo[i] + 'a');
        }
        printf("
    ");
        return 0;
    }
    

      

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    char name[120][120];
    int mat[30][30];
    int mark[30];
    int topo[30];
    int vis[30];
    int cnt;
    int main()
    {
        int n;
        int i,j,k;
        while(scanf("%d",&n)!=EOF)
        {
            memset(mat,0,sizeof(mat));
            memset(mark,0,sizeof(mark));
            cnt=0;k=0;
            int ok=1;
            for(i=1;i<=n;i++)
            {
                scanf("%s",name[i]);
            }
            for(i=1;i<n;i++)
            {
                if(ok==0) break;
                int len1=strlen(name[i]);
                int len2=strlen(name[i+1]);
                for(j=0;j<len1&&j<len2;j++)
                {
                    if(name[i][j]!=name[i+1][j])
                    {
                        int x=name[i][j]-'a';
                        int y=name[i+1][j]-'a';
                        if(mat[x][y]==0)
                        {
                            mat[x][y]=1;
                            mark[y]++;
                        }
                        break;
                    }
                }
                if(len1>len2&&j==len2)
                {
                    ok=0;
                }
            }
            for(i=0;i<26;i++)
            {
                    int flag=-1;
                    for(j=0;j<26;j++)
                    {
                       if(mark[j]==0)
                       {
                           topo[k++]=j;
                           mark[j]=-1;
                           flag=j;
                           break;
                       }
                    }
                    if(flag!=-1)
                    {
                        for(j=0;j<26;j++)
                        {
                            if(mat[flag][j]==1)
                            {
                                mark[j]--;
                            }
                        }
                    }
            }
            if(k<26) ok=0;
            if(ok)
            {
                for(i=0;i<26;i++)
                {
                    printf("%c",topo[i]+'a');
                }
                printf("
    ");
            }
            else printf("Impossible
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    设计模式之——浅谈strategy模式(策略模式)
    设计模式之——bridge模式
    验证ip地址
    查询sqlserver数据库表的记录数
    iis网站部署常见错误
    asp.net 向后台提交 html 代码段 包括 <> 标签
    jquery花式图片库——jqFancyTransitions
    为sqlserver数据库添加专用用户名
    sqlserver 收缩数据库/文件
    你使用的ie版本过低请。。。
  • 原文地址:https://www.cnblogs.com/sola1994/p/4319640.html
Copyright © 2011-2022 走看看