例题:
POJ - 2989 All Friends
模板:
void dfs(int d,int an,int sn,int nn) { if(!sn&&!nn) { //for(int i=1;i<=an;i++) // cout<<all[d][i]<<' '; //cout<<endl; sum++; } if(sum>1000) return; int u=some[d][1]; for(int j=1;j<=an;j++) all[d+1][j]=all[d][j]; for(int i=1;i<=sn;i++) { int v=some[d][i]; all[d+1][an+1]=v; if(mp[u][v]) continue; int csn=0,cnn=0; for(int j=1;j<=sn;j++) if(mp[v][some[d][j]]) some[d+1][++csn]=some[d][j]; for(int j=1;j<=nn;j++) if(mp[v][none[d][j]]) none[d+1][++cnn]=none[d][j]; dfs(d+1,an+1,csn,cnn); some[d][i]=0; none[d][++nn]=v; } }