zoukankan      html  css  js  c++  java
  • UVA247 电话圈 Calling Circles

    算法

    floyed+传递闭包

    代码

    #include<bits/stdc++.h>
    using namespace std;
    map<string,int>mp;
    string st[30];
    string st1,st2;
    bool g[30][30];
    bool used[30];
    int sum;
    int n,m;
    int T;
    int main()
    {
        cin>>n>>m;
        while(1)
        {
            sum=0;
            T++;
            //cout<<T<<endl;
    
            memset(g,0,sizeof(g));
            memset(used,0,sizeof(used));
            mp.clear();
            for(int i=1;i<=m;i++)
            {
                cin>>st1>>st2;
                if(!mp[st1])
                {
                    mp[st1]=++sum;
                    st[sum]=st1;
                }
                if(!mp[st2])
                {
                    mp[st2]=++sum;
                    st[sum]=st2;
                }
                g[mp[st1]][mp[st2]]=1;//map存字符串
            }
            for(int k=1;k<=n;k++)
            {
                for(int i=1;i<=n;i++)
                {
                    for(int j=1;j<=n;j++)
                    {
                        g[i][j]=g[i][j] || (g[i][k] && g[k][j]);//floyed传递闭包
                    }
                }
            }
            printf("Calling circles for data set %d:
    ",T);
            /*for(int i=1;i<=n;i++)
                cout<<st[i]<<" ";cout<<endl;*/
            for(int i=1;i<=n;i++)
            {
                if(!used[i])
                {
                    cout<<st[i];
                    used[i]=1;
                    for(int j=1;j<=n;j++)
                    {
                        if(g[i][j]&&g[j][i]&&!used[j])
                        {
                            cout<<", "<<st[j];
                            used[j]=1;
                        }   
                    }
                    cout<<endl;//输出每一个电话圈(集合)
                }
            }
            cin>>n>>m;
            if(n||m)cout<<endl;
            else break;
        }
        return 0;
    }
    

      

  • 相关阅读:
    哈希表(hash)
    并查集
    trie树(字典树)
    单调队列(滑动窗口)
    单调栈
    用数组实现栈与队列
    数组实现双链表
    数组实现单链表
    区间合并
    离散化
  • 原文地址:https://www.cnblogs.com/ruanmowen/p/12720238.html
Copyright © 2011-2022 走看看