题目链接:https://hihocoder.com/problemset/problem/1054
补一下dfs的题,有点弱。。。
1 #include<cstdio> 2 #include<cstring> 3 4 int WA[10][10]; 5 int known[10][10]; 6 int num[10],vis[10]; 7 int t,n; 8 int x,y; 9 int res; 10 void dfs(int ans) 11 { 12 if(ans>=4) 13 { 14 int temp=0; 15 for(int i=1;i<ans;i++) 16 { 17 if(known[num[i]][num[i-1]]) 18 temp++; 19 } 20 if(temp==n) 21 res++; 22 23 } 24 for(int i=1;i<=9;i++) 25 { 26 if(ans>0&&!vis[WA[num[ans-1]][i]]) continue; 27 if(!vis[i]) 28 { 29 vis[i]=1; 30 num[ans]=i; 31 dfs(ans+1); 32 vis[i]=0; 33 } 34 } 35 return ; 36 } 37 int main() 38 { 39 memset(WA,0,sizeof(WA)); 40 WA[1][3]=WA[3][1]=2; 41 WA[1][7]=WA[7][1]=4; 42 WA[1][9]=WA[9][1]=5; 43 WA[2][8]=WA[8][2]=5; 44 WA[3][7]=WA[7][3]=5; 45 WA[3][9]=WA[9][3]=6; 46 WA[4][6]=WA[6][4]=5; 47 WA[7][9]=WA[9][7]=8; 48 49 scanf("%d",&t); 50 while(t--) 51 { 52 res=0; 53 memset(known,0,sizeof(known)); 54 memset(vis,0,sizeof(vis)); 55 vis[0]=1; 56 scanf("%d",&n); 57 for(int i=0;i<n;i++) 58 { 59 scanf("%d%d",&x,&y); 60 known[x][y]=known[y][x]=1; 61 } 62 dfs(0); 63 printf("%d ",res); 64 } 65 }