POJ2531——Network Saboteur

来源:互联网 发布:2017中超数据 编辑:程序博客网 时间:2024/06/05 16:33

题目大意:

                将一个图分为AB两部分 ,求连接这两个图的和的最大值;

解题方法:

                     方法 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;}


原创粉丝点击