1,题目:
2主要思路:
将m对仇敌关系转化成一张二维关系表(cd[i][j])通过调用表来减少dfs时的时间复杂度。
3代码:
#include <iostream>
#include<bits/stdc++.h>
#include <algorithm>
using namespace std;
int n,m;
int cd[105][105]={0},rs2[105]={0},rs3[105]={0},max1=0;
void dfs(int sum,int r){
if(r>n){
if(sum>max1){
max1=sum;
for(int i=1;i<=n;i++){
rs3[i]=rs2[i];//将选取的人录入
}
}
return ;
}
int check=1;//定义一个状态参量
for(int j=1;j<r;j++){
if(cd[r][j]==1&&rs2[j]){
check=0;//如果已被选中的人与当前需判定的人之间存在仇敌关系则check=0然后退出查找
break;
}
}
if(check){//如果没有仇敌关系
rs2[r]=1;//选上此人