zoukankan      html  css  js  c++  java
  • POJ 1129

    #include<iostream>
    #include<stdio.h>
    #include<string>
    #define MAXN 60
    using namespace std;
    int max_clique(int n, int * * mat, int *ret) ;
    int main()
    {
        //freopen("acm.acm","r",stdin);
        int i;
        int ans;
        int j;
        string s;
        int num;
        int * * _m;
        int * ret;
        while(cin>>num)
        {
            if(num == 0)
                break;
            _m = new int * [num];
            ret = new int[num];
            for(i = 0; i < num; ++ i)
            {
                _m[i] = new int[num];
                memset(_m[i],0,sizeof(int)*num);
            }
        //for(i = 0; i < num; ++ i)
        //        for(j = 0; j < num; ++ j)
        //            cout<<_m[i][j]<<" ";
            for(i = 0; i < num; ++ i)
            {
                cin>>s;
                if(s.length() == 2)
                    continue;
                else
                {
                    for(j = 2; j < s.length(); ++ j)
                    {
                        _m[s[0] - 'A'][s[j] - 'A'] = 1;
                    }
                }
            }
        ans = max_clique(num,_m,ret);
        cout<<ans;
        if(ans == 1)
            cout<<" channel needed."<<endl;
        else
            cout<<" channels needed."<<endl;
        delete [] _m;
        delete ret;
        }
    }
    
    
    void clique(int n, int* u, int * * mat, int size, int& max, int& bb, int * res, int* rr, int* c) {
        int i, j, vn, v[MAXN];
        if (n) {
            if (size + c[u[0]] <= max) return;
            for (i = 0; i < n + size - max && i < n; ++ i) {
                for (j = i + 1, vn = 0; j < n; ++ j)
                    if (mat[u[i]][u[j]])
                        v[vn ++] = u[j];
                rr[size] = u[i];
                clique(vn, v, mat, size + 1, max, bb, res, rr, c);
                if (bb) return;
            }
        } else if (size > max) {
            max = size;
            for (i = 0; i < size; ++ i)
                res[i] = rr[i];
            bb = 1;
        }
    }
    
    int max_clique(int n, int * *mat, int * ret) {
        int max = 0, bb, c[MAXN], i, j;
        int vn, v[MAXN], rr[MAXN];
        for (c[i = n - 1] = 0; i >= 0; -- i) {
            for (vn = 0, j = i + 1; j < n; ++ j)
                if (mat[i][j])
                    v[vn ++] = j;
            bb = 0;
            rr[0] = i;
            clique(vn, v, mat, 1, max, bb, ret, rr, c);
            c[i] = max;
        }
        return max;
    }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    ASP中常用的服务器检测源代码
    dicsuzX表结构
    Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式
    ASP快速获取远程文件大小的方法
    利用phpmyadmin修改mysql的root密码
    如何注册java程序为windows服务
    NSTimer
    ASP获得上个月、本月、下个月的第一天和最后一天的代码
    采集网页图片代码
    JS控制图片翻转代码,兼容firefox,ie,chrome等浏览器
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563286.html
Copyright © 2011-2022 走看看