深搜全排列
阿新 • • 發佈:2018-11-29
全排列1 - n
#include <stdio.h> int a[10]; int vis[10]; int n; void dfs(int step)//step是當前已經進去排列的個數 { if (step == n)//如果找到n個之後,列印一次 { for (int i = 0; i < n; i++) printf("%d ", a[i]); puts(""); return ;//結束 } for (int i = 1; i <= n; i++) { if (vis[i] == 0)//排列中沒有此數字,就將它加入到排列中 { vis[i] = 1; a[step] = i; dfs(step + 1); vis[i] = 0; } } } int main() { scanf("%d", &n); dfs(0); return 0; }
全排列n - m
#include <stdio.h> int a[10]; int vis[10]; int n,m; void dfs(int step)//step是當前已經進去排列的個數 { if (step == m - n + 1)//如果找到(m - n)個之後,列印一次 { for (int i = 0; i < step; i++) printf("%d ", a[i]); puts(""); return ; } for (int i = 0; i <= m - n; i++) { if (vis[i] == 0)//排列中沒有此數字,就將它加入到排列中 { vis[i] = 1; a[step] = i + n; dfs(step + 1); vis[i] = 0; } } } int main() { scanf("%d %d",&n,&m); dfs(0); return 0; }