题意:给定无向图,将顶点分成两个集合,使得两个集合间的所有边权最大。
代码如下
#include<stdio.h>
int c[22][22],n,ans,set[22];
void DFS(int id,int sum)
{
int i,t;
set[id]=1;
for(i=0;i<n;i++)
{
if(set[i]==1)
sum-=c[id][i];
else
sum+=c[id][i];
}
if(sum>ans)
ans=sum;
for(i=id+1;i<n;i++)
{
DFS(i,sum);
set[i]=0;
}
}
void main()
{
int i, j;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&c[i][j]);
memset(set,0,sizeof(set));
ans=0;
DFS(0,0);
printf("%d\n",ans);
}