• POJ 1094 拓扑排序


    题意大坑,建议先看Discuss……
    否则代码写得就像以下的一团糟。。。。

    其实并不难,拓扑排序+乱搞就可以AC。

    // by SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    char jy[4],vis[26],in[26],temp[26],flag,VIS[26],F,rec,G;
    int first[30],next[999],v[999],tot,n,m,s[999];
    void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
    int main(){
        while(scanf("%d%d",&n,&m)&&(n||m)){
            memset(VIS,0,sizeof(VIS));
            memset(in,0,sizeof(in));
            memset(first,-1,sizeof(first)),tot=F=0;
            for(int ii=1;ii<=m;ii++){
                rec=G=0,memset(vis,0,sizeof(vis));
                scanf("%s",jy);jy[0]-='A',jy[2]-='A';
                if(F)continue;
                add(jy[0],jy[2]),in[jy[2]]++;
                VIS[jy[0]]=VIS[jy[2]]=1;
                for(int i=0;i<n;i++)temp[i]=in[i];
                while(1){
                    char minus[26];
                    memset(minus,0,sizeof(minus));
                    flag=0;
                    for(int i=0;i<n;i++)
                        if(!temp[i]&&!vis[i]&&VIS[i]){
                            s[rec++]=i;
                            if(flag)G=1;
                            vis[i]=flag=1;
                            for(int j=first[i];~j;j=next[j])minus[v[j]]++;
                        }
                    for(int i=0;i<n;i++)temp[i]-=minus[i];
                    if(!flag){
                        for(int i=0;i<n;i++)
                            if(VIS[i]&&temp[i]){printf("Inconsistency found after %d relations.
    ",ii),F=1;goto en;}
                            else if(!vis[i])goto en;
                        if(!G){
                            F=1,printf("Sorted sequence determined after %d relations: ",ii);
                            for(int i=0;i<rec;i++)printf("%c",s[i]+'A');puts(".");
                        }
                        en:break;
                    }
                }
                if(ii==m&&!F&&G)puts("Sorted sequence cannot be determined.");
            }
        }
    }
  • 相关阅读:
    Linux下搭建DNS服务器
    Linux下安装Oracle客户端
    CentOS下配置LVM和RAID
    Linux下配置MySQL主从复制
    Linux下二进制文件安装MySQL
    不偏移的天地图地图服务
    Lucene
    Arcpy处理修改shapefile FeatureClass 线要素坐标
    使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
    ArcGIS自定义坐标变换中的方法说明
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532360.html
Copyright © 2020-2023  润新知