HDU 5952 Counting Cliques 图DFS
2016-11-13 14:44
363 查看
为了避免在搜索时重复,用了一种特殊的建图方式,即从编号小的边连向编号大的边.
因为所求的是无向完全图的个数,在无向完全图中只能找到一条符合v1
因为所求的是无向完全图的个数,在无向完全图中只能找到一条符合v1
#include<bits/stdc++.h> using namespace std; const int MAXN=105; const int MAXM=1005; int V[MAXM],First[MAXN],Next[MAXM],Cnt; int T,N,M,S,Ans,Cur[MAXN]; bool G[MAXN][MAXN]; void Init() { Cnt=0; Ans=0; memset(First,-1,sizeof(First)); memset(Next,-1,sizeof(Next)); memset(G,false,sizeof(G)); } void AddEdge(int u,int v) { V[Cnt]=v; Next[Cnt]=First[u]; First[u]=Cnt++; } void Dfs(int u) { if (Cur[0]==S) { Ans++; return; } for (int i=First[u];i!=-1;i=Next[i]) { int v=V[i],flag=1; for (int j=1;j<=Cur[0];j++) { if (!G[v][Cur[j]]) { flag=0; break; } } if (flag) { Cur[0]++; Cur[Cur[0]]=v; Dfs(v); Cur[0]--; } } } int main() { scanf("%d",&T); while (T--) { Init(); int a,b; scanf("%d%d%d",&N,&M,&S); for (int i=0;i<M;i++) { scanf("%d%d",&a,&b); if (a>b) swap(a,b); AddEdge(a,b); G[a][b]=G[b][a]=true; } for (int i=1;i<=N;i++) { Cur[0]=1; Cur[1]=i; Dfs(i); } printf("%d\n",Ans); } return 0; }
相关文章推荐
- Counting Cliques HDU - 5952 单向边dfs
- hdu 5952 Counting Cliques(dfs 优化)
- HDU 5952 - Counting Cliques (DFS)
- HDU - 5952(暴力DFS)
- 【HDU】5952 - Counting Cliques(dfs)
- HDU - 5952 暴力dfs
- HDU-5952 Counting Cliques(16年ICPC沈阳赛区)(暴力DFS)
- hdu 5952 Counting Cliques(最大团思想+dfs)
- HDU 5952 Counting Cliques(dfs)
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
- hdu 5952 Counting Cliques(dfs优化)
- 【HDU 5952 Counting Cliques】& DFS
- hdu 5952 - dfs+优化
- hdu 5952 Counting Cliques(dfs优化) 2016ACM/ICPC亚洲区沈阳站
- hdu_5952 Counting Cliques(dfs,优化)
- hdu5952 Counting Cliques DFS
- hdu 1045 || zoj 1002 Fire Net(搜索:DFS+水题)
- HDU 1175—— 连连看( BFS 、DFS)
- HDU 1010 Tempter of the Bone &&ZOJ 2110【DFS】