最大团算法模板
#include
#include
#include
#include
#define maxn 1001
#define INF 10000000
using namespace std;
int g[51][51], alt[51][51], Max[51], res;
bool dfs(int cur, int tot) {
if (!cur) {
if (tot > res) {
res = tot;
return 1;
}
return 0;
}
int i, j, u, nxt;
for (i = 1; i <= cur; i++) {
if (cur - i + 1 + tot <= res)return 0;
u = alt[tot][i];
if (Max[u] + tot <= res)return 0;
nxt = 0;
for (j = i + 1; j <= cur; j++) {
if (g[u][alt[tot][j]])alt[tot + 1][++nxt] = alt[tot][j];
}
if (dfs(nxt, tot + 1))return 1;
}
return 0;
}
void solve(int n) {
int i, j, cur;
for (i = n; i; i--) {
cur = 0;
for (j = i + 1; j <= n; j++) {
if (g[i][j])alt[1][++cur] = j;
}
dfs(cur, 1);
Max[i]=res;
}
}
int main() {
int n, i, j;
while (scanf("%d", &n) && n) {
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
scanf("%d", &g[i][j]);
}
}
res = 0;
solve(n);
printf("%d\n", res);
}
}