这个是理解标记和取消标记,用一个vis数组来标记
1 #include <stdio.h> 2 3 int a[100]; 4 int vis[100]; 5 int num;//统计总数 6 void dfs(int n, int cur) 7 { 8 if(n == cur) 9 { 10 for(int i = 0; i < n; i++) 11 printf("%d ", a[i]); 12 printf("\n"); 13 num++; 14 return; 15 } 16 for(int i = 1; i <= n; i++) 17 { 18 if(vis[i] == 0) 19 { 20 vis[i] = 1;//标记 21 a[cur] = i; 22 dfs(n, cur + 1); 23 vis[i] = 0;//取消标记 24 } 25 } 26 } 27 int main() 28 { 29 int n; 30 while(~scanf("%d", &n)) 31 { 32 num = 0; 33 dfs(n, 0); 34 printf("sum total: %d\n", num); 35 } 36 return 0; 37 }
时间: 2024-10-14 02:12:49