算法作业-最大团问题(回溯法)

算法作业-最大团问题(回溯法)_第1张图片
本题最开始我以为是要用深度优先再加一个判断,写了半天发现题意理解错误。其实不停的循环判断该点和后面的点是否是一个团组中的就行了,将沿途中的点保存在Vector中,对每一个新的点进行判断:是否和前面所有的点属于同一个团中就行了。

#include
#include
#include
#include

using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
using std::stack;

struct position
{
     
	int x;
	int y;
};

void maxGroup(const vector<vector<int>>& matrix, const int& n, int i, vector<int>point, int &max)
{
     
	if (point.empty())point.push_back(i);
	else
	{
     
		bool flag = true;
		for (auto j : point)
		{
     
			if (matrix[i][j] != 1)
				return;
		}
		point.push_back(i);
	}
	if (point.size() > max)
		max = point.size();
	for (auto j = i + 1; j < n; j++)
		maxGroup(matrix, n, j, point, max);
}

int main()
{
     
	int n, m;
	while (cin >> n >> m and n != 0) {
     
		vector<vector<int>>matrix;
		for (auto i = 0; i < n; i++)
		{
     
			vector<int>arr(n);
			matrix.push_back(arr);
		}
		for (auto j = 0; j < m; j++)
		{
     
			int x, y;
			cin >> x >> y;
			matrix[x - 1][y - 1] = 1;
			matrix[y - 1][x - 1] = 1;

		}
		int max = 0;
		vector<int>point;
		for(auto i=0;i<n;i++)
		{
     
			maxGroup(matrix, n, i, point, max);
		}
		cout << max << endl;
	}
} 
/*
5 6
1 2
2 3
2 4
3 4
3 5
4 5
*/

你可能感兴趣的:(算法作业,leetcode,算法,c++)