题目大意:
将一个图分为A、B两部分 ,求连接这两个图的和的最大值;
解题方法:
方法 1 . 暴力搜索 + DFS
方法2.随机生成数算法
方法3.最大生成树
Tips:
这道题数据量比较小;直接暴力
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int mate[22][22];
int arr[22];
int n, ans;
void dfs(int x, int sum)
{
int i;
arr[x] = 1;
for (i = 0; i < n; i++) //将 第i个数加入数组时的总和
{
if (arr[i] == 1)
sum -= mate[x][i];
else
sum += mate[x][i];
}
if (sum > ans) ans = sum; //交换最大值
for (i = x+1; i < n; i++) //更新搜索起点
{
dfs(i, sum); //继续搜索
arr[i] = 0;
}
}
int main()
{
freopen("in.txt","r",stdin);
int i, j;
while(cin>>n)
{
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin>>mate[i][j];
memset(arr, 0, sizeof (arr));
ans = 0;
dfs(0, 0);
cout<<ans<<endl;
}
return 0;
}