poj 2531: Network Saboteur

解題思路:

DFS

#include<iostream>
using namespace std;

int n;
int traff[25][25];
int group1[25],num1 = 0;
int group2[25],num2 = 0;
int ans = 0;

void DFS(int i,int j)
{
	if(i == n+1)
	{
		if(j>ans)
			ans = j;
		return;
	}
	int k;
	//放入第二組 
	k = j;
	for(int p=0;p<num1;p++)
		k += traff[group1[p]][i];
	group2[num2] = i; 
	num2++;
	DFS(i+1,k);
	num2--;
	//放入第一組 
	k = j;
	for(int p=0;p<num2;p++)
		k += traff[group2[p]][i];
	group1[num1] = i;
	num1++;
	DFS(i+1,k);
	num1--;
	
	return;
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>traff[i][j];
	group1[0] = 1;
	num1 ++;
	DFS(2,0);
	cout<<ans<<endl;
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章