zoukankan      html  css  js  c++  java
  • UVa(247),Floyd做传递闭包

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=183

    紫书365页,用Floyd做传递闭包,然后深搜,其实可以不用找前驱,没有一定的顺序,爆搜一边就可以了。

    然后是名字的导入,用vector处理就很好了。没有找到,就加到后面。

    freopen没有注释掉,WA得我想哭。

    names没清空,RE得想死。

    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int dist[100][100];
    bool vis[100];
    
    int n,m;
    
    vector<string> names;
    
    int getId(const string &s)
    {
        for(int i=0; i<names.size(); i++)
            if(names[i]==s) return i;
        names.push_back(s);
        return names.size()-1;
    }
    
    void dfs(int u)
    {
        vis[u] = 1;
        for(int v=0; v<n; v++)
            if(!vis[v]&&dist[u][v]&&dist[v][u])
            {
                printf(", %s", names[v].c_str());
                dfs(v);
            }
    }
    
    int main()
    {
        char s1[99], s2[99];
        int cases = 0;
        //freopen("input.txt","r",stdin);
        while(scanf("%d%d",&n,&m),n)
        {
            names.clear();
            memset(dist,0,sizeof(dist));
            for(int i=0; i<n; i++)
                dist[i][i] = 1;
            for(int i=0; i<m; i++)
            {
                scanf("%s%s", s1, s2);
                dist[getId(s1)][getId(s2)] = 1;
            }
    
            for(int k=0; k<n; k++)
                for(int i=0; i<n; i++)
                    for(int j=0; j<n; j++)
                        dist[i][j] = dist[i][j]||(dist[i][k]&&dist[k][j]);
    
            if(cases > 0) printf("
    ");
            printf("Calling circles for data set %d:
    ", ++cases);
    
            memset(vis, 0, sizeof(vis));
            for(int i = 0; i < n; i++)
                if(!vis[i])
                {
                    printf("%s", names[i].c_str());
                    dfs(i);
                    printf("
    ");
                }
        }
        return 0;
    }
  • 相关阅读:
    Linux文件系统(三)虚拟文件系统
    Linux文件系统(二)磁盘文件系统
    requests模块
    jquery进阶(文档操作,事件委托等)
    JQuery基本使用
    js基础和js操作bom和dom对象
    js -- javascript
    CSS
    HTML
    python之pymysql模块
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5788079.html
Copyright © 2011-2022 走看看