#include<stdio.h> #include<string.h> int temp[50]; int mark[50]; int b[50]; int n; int count; void dfs(int level) { int i, j, k = 0; if(count > 20) return; if(level == n + 1){ for(i = 1; i <= n; i++){ k = 0; memset(temp, 0, sizeof(temp)); for(j = i + 1; j <= n; j++){//判断有没有逆序 if(b[j] < b[i]){ temp[k++] = b[j]; /* if(b[j] > temp) return; else temp = b[j];*/ } for(int z = 0; z < k ; z ++){ if(k > 1) if(temp[z] < temp[z + 1]) return; } } } if(i == n + 1){ count++; if(count <= 20){ for(i = 1; i <= n; i++) printf("%d", b[i]); printf("\n"); } } } else{ for(i = 1; i <= n; i++){ if( mark[i] == 0){ mark[i] = 1; b[level] = i; dfs(level + 1); mark[i] = 0; } } } } int main() { scanf("%d", &n); dfs(1); return 0; }
火车进站
最新推荐文章于 2020-12-24 13:06:38 发布