您的位置:首页 > 产品设计 > UI/UE

[HDU 1530] Maximum Clique 最大团

2015-08-21 13:34 393 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1530

题意:以邻接矩阵方式输入一个图,求图的最大完全子图。

思路:最大团,狠暴力的算法。直接贴模板

[code]#include <stack>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;

int n, res;
bool vis[55];
int num[55];//每个点的子结点数
int mapn[55][55]; //邻接矩阵

int Dfs(int rt, int sum)
{
    if(rt > n){
        if(sum > res)
            res = sum;
        return 0;
    }
    if(sum + n - rt < res)
        return 0;
    if(sum > num[rt]){
        Dfs(rt+1, sum);
        return 0;
    }
    int i;
    for(i = 1; i < rt; i++){
        if(vis[i] && !mapn[i][rt])
            break;
    }
    if(i == rt){
        vis[rt] = true;
        Dfs(rt+1, sum+1);
        vis[rt] = false;
    }
    Dfs(rt+1, sum);
    return 0;
}

int main()
{
    while(~scanf("%d", &n) && n){
        memset(num, 0, sizeof(num));
        for(int i = 1; i <= n; i++){
            vis[i] = false;
            for(int k = 1; k <= n; k++){
                scanf("%d",&mapn[i][k]);
                num[i] += mapn[i][k];
            }
        }
        res=0;
        Dfs(1, 0);
        printf("%d\n",res);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: