题意:
给出一个图,询问有多少个大小为s的完全图
思路:
题中给出提示,数据很小,而且每个点的边也不多,在搜的时候枚举一点,之后用新加的点与之前的点做一个判断,如果都有边就继续搜,否则退出
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=105;
vector<int>vec[maxn];
int mp[maxn][maxn];
int n,m,s;
int ans;
int vis[maxn];
int cnt;
void dfs(int u,int ced)
{
if(ced==s)
{
ans++;
return ;
}
for(int i=0;i<vec[u].size();i++)
{
int t=vec[u][i];
int ok=1;
for(int j=1;j<=ced;j++)
{
int v=vis[j];
if(mp[v][t]==0)
{
ok=0;
break;
}
}
if(ok)
{
vis[ced+1]=t;
dfs(t,ced+1);
vis[ced+1]=0;
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(mp,0,sizeof(mp));
ans=0;
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n;i++)
vec[i].clear();
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
if(u>v)
swap(u,v);
mp[u][v]=mp[v][u]=1;
vec[u].push_back(v);
}
for(int i=1;i<=n;i++)
{
vis[1]=i;
dfs(i,1);
vis[1]=0;
}
printf("%d\n",ans);
}
}