用深搜求出子集,枚举每个自己中是否存在limit数组中的元素
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int 集合大小
* @param m int 限制数量
* @param limit Pointvector 不能同时出现的(u,v)集合
* @return int
*/
int cnt = 0;
int vis[25] = { 0 };
void dfs(int k, int n, vector<Point>& limit)
{
if (k == n)
{
int flag = 1;
for (int i = 0; i < limit.size(); i++)
{
if (vis[limit[i].x - 1] && vis[limit[i].y - 1])
{
flag = 0;
break;
}
}
if (flag) cnt++;
return;
}
vis[k] = 1;
dfs(k + 1, n, limit);
vis[k] = 0;
dfs(k + 1, n, limit);
}
int solve(int n, int m, vector<Point>& limit) {
dfs(0, n, limit);
return cnt;
}
};


京公网安备 11010502036488号