zoukankan      html  css  js  c++  java
  • UVa193Graph Coloring

    DFS

    题意:相邻的节点不能都涂成黑色,问是黑色节点最多的方案(只能选择黑和白)

    #include<iostream>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    int G[101][101],black[101],ANS[101];
    int n,m,ans;
    void DFS(int cur,int w)//cur当前要处理的节点,当前已有白色节点个数
    {
    	if(w>=n-ans)return;//白色节点多于最优情况下白色节点时
    	if(cur==n+1)
    	{
            ans=n-w;
            for(int i=1;i<=n;i++)
    		{
    			if(black[i])ANS[i]=1;
    			else ANS[i]=0;
    		}
    		return;
    	}
    	for(int j=0;j<=1;j++)
    	{
    		if(j==0)DFS(cur+1,w+1);
    		if(j==1)
    		{
    			for(int k=1;k<=n;k++)
    			{
    				if(G[cur][k]&&black[k])return;
    			}
    			black[cur]=1;
    			DFS(cur+1,w);
    			black[cur]=0;
    		}
    	}
    	return;
    }
    int main()
    {
    	int cas,x,y;
    	scanf("%d",&cas);
    	while(cas--)
    	{
    		memset(black,0,sizeof(black));
    		memset(ANS,0,sizeof(ANS));
    		memset(G,0,sizeof(G));
    		scanf("%d%d",&n,&m);
            for(int i=0;i<m;i++)
    		{
                 scanf("%d%d",&x,&y);
    			 G[x][y]=1;
    			 G[y][x]=1;
    		}
    		ans=0;
    		DFS(1,0);
            int f=0;
    		printf("%d\n",ans);
    		for(int i=1;i<=n;i++)
    		{
    			
    			if(ANS[i]&&f)printf(" %d",i);
    			else if(ANS[i]){printf("%d",i);f=1;}
    		}
    		printf("\n");
    		
    	}
    }
    
  • 相关阅读:
    MySQL性能优化的最佳经验
    18个网站SEO建议
    sql之left join、right join、inner join的区别
    PHP与MYSQL事务处理
    Firefox上Web开发工具库一览
    SphinxSE的安装
    python XML
    python yaml
    C语言文本处理
    Linux strace命令
  • 原文地址:https://www.cnblogs.com/sook/p/2003726.html
Copyright © 2011-2022 走看看