• uva-193-图染色-枚举


      题意:n个节点,可用描成黑色或者白色,黑节点和黑节点不能相连,问最多描出多少黑节点

    #include <iostream>
    #include <stdio.h>
    #include<memory.h>
    using namespace std;
    
    #define null NULL
    const int N = 110;
    int final = -1;
    int mindex[N];
    int map[N][N];
    int vis[N];
    int res[N];
    int n, m;
    
    void read()
    {
        int s, e;
        for (int i = 0; i < m; i++)
        {
            cin >> s >> e;
            map[s][mindex[s]++] = e;
            map[e][mindex[e]++] = s;
        }
    
    }
    
    void dfs(int cur, int total)
    {
        if(final!=-1 && n-cur+1+total<=final)
        {
            //n-cur+1+total,表示把当前节点和后面的所有节点都描成黑色能达到的最大数
            return;
        }
        if (cur > n)
        {
            if (total > final)
            {
                final = total;
                int j = 0;
                for (int i = 1; i <= n; i++)
                {
                    if (vis[i] == 1)
                    {
                        res[j++] = i;
                    }
                }
            }
            return;
        }
        int ok = 1;
        for (int i = 0; i < mindex[cur]; i++)
            if (vis[map[cur][i]] == 1)
            {
                ok = 0;
                break;
            }
        if (ok)
        {
            vis[cur] = 1;
            dfs(cur + 1, total + 1);
        }
        vis[cur] = 0;
        dfs(cur + 1, total);
    }
    
    int main(int argc, char* argv[])
    {
        //freopen("C:\Users\zzzzz\Desktop\1.txt","r",stdin);
        int k;
        cin >> k;
        while (k--)
        {
            cin >> n >> m;
            memset(map, 0, sizeof(map));
            memset(mindex, 0, sizeof(mindex));
            memset(vis,0,sizeof(vis));
            read();
            final = -1;
            dfs(1, 0);
            cout<<final<<endl;
            cout<<res[0];
            for(int i = 1; i <final;i++)
                cout<<" "<<res[i];
            cout<<endl;
        }
    
        return 0;
    }
  • 相关阅读:
    java(一) 基础部分
    Spring使用Autowiring自动装配 解决提示报错小技巧
    idea 中dao层自动生成接口
    从git远程仓库Checkout项目到本地
    idea 新建项目上传至git(coding)
    使用Travis CI给hexo部署做持续集成
    LeetCode395-至少有 K 个重复字符的最长子串
    Java注解
    Java反射
    Java反射应用实例
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/7669418.html
Copyright © 2020-2023  润新知