#include<iostream>//一开始从两个集合出发考虑,第一个有哪些点,第二个有哪些点,没想出来
//然后考虑每个点,可以在第一个集合或者第二个集合
using namespace std;
int length[23][23],ans[23],n,sum = 0;
void dfs(int a,int t)
{
if(a > n)
{
if(t > sum)
sum = t;
return ;
}
int i,m;
m = 0;
ans[a] = 1; //当前点放入集合A
for(i = 0;i < a;i++)
if(ans[i] == 0)
m += length[i][a];
dfs(a+1,t+m);
m = 0;
ans[a] = 0;//当前点放入集合B
for(i = 0;i < a;i++)
if(ans[i] == 1)
m += length[i][a];
dfs(a+1,t+m);
}
int main()
{
int i,j;
cin>>n;
for(i = 0;i < n;i++)
for(j= 0;j < n;j++)
cin>>length[i][j];
dfs(0,0);
cout<<sum<<endl;
return 0;
}
poj 2351 Network Saboteur DFS
最新推荐文章于 2020-12-22 11:36:28 发布