标签:
| Time Limit: 1000MS | Memory Limit: 10000K | |||
| Total Submissions: 4370 | Accepted: 1980 | Special Judge | ||
Description
Input
Output
Sample Input
1 6 8 1 2 1 3 2 4 2 5 3 4 3 6 4 6 5 6
Sample Output
3 1 4 5
利用性质,最大团等于补图最大独立集
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
int n,mp[55][55],vis[55],cnt,bestn;
void dfs(int x)
{
if(x>n)
{
if(cnt>bestn)
bestn=cnt;
return ;
}
bool ok=true;
for(int i=1;i<x;i++)
{
if(vis[i]&&!mp[i][x])
{
ok=false;
break;
}
}
if(ok)
{
vis[x]=1;
cnt++;
dfs(x+1);
cnt--;
}
if(cnt+n-x>bestn)
vis[x]=0,dfs(x+1);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
cnt=bestn=0;
memset(vis,0,sizeof(vis));
memset(mp,0,sizeof(mp));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
scanf("%d",&mp[i][j]);
}
dfs(1);
printf("%d\n",bestn);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/water-full/p/4461034.html