NYOJ 366题
2013-12-01 22:49
330 查看
这道题主要就是一个递归思想,自己刚做题对递归确实不熟,这道题还是通过白皮书才懂!
对n个数的全排列,首先看n为三时,则它的全排列分别是123; 132; 213; 231; 312; 321。全排列时首先是对第一个数进行排列,排列完1则再去排列2以此类推。
比如n为3时,1放到最前面,后面的2和3则也同样需要进行全排列,想说的更明白点 不过自己开解有限,说不太清,具体实现看代码 代码中会有解释!
#include<stdio.h> int a[15], b[15]; void f(int m, int n)//全排列函数 m是指已经排列的个数,n是指要排列的个数 { int i, j, ok; if(m == n)//说明排列已完 可以输出了 { for(i = 0; i < n; i++) printf("%d", b[i]); printf("\n"); } else { for(i = 0; i < n; i++)//通过这个双重循环可以找出为排列最小的那个数 { ok = 1; for(j = 0; j < m; j++)//b数组中装的是前面m个数的排列 { if(b[j] == a[i]) { ok = 0; break; } } if(ok) { b[m] = a[i];//若a[i]为被排列,则赋值给b数组 f(m + 1, n);//递归循环 } } } } int main() { int t, i, n; scanf("%d", &t); while(t--) { scanf("%d", &n); for( i= 0; i < n; i++) { a[i] = i + 1;//a数组中的数时有序的,看其赋值形式就可知 } f(0, n); } return 0; }//理解有限,表达能力有限整理的有点烂, 谅解!
相关文章推荐
- nyoj 366 D的小L 【全排列(模板)】
- NYOJ-366:D的小L
- NYOJ--366--D的小L
- NYOJ 题目366 D的小L (next_permutation)
- nyoj_366_D的小L_201403011600
- NYOJ 366 (全排列)
- NYOJ 366 D的小L(STL)
- nyoj 366 D的小L 【全排列&&必须记住】
- nyoj-366-D的小L
- nyoj 366 D的小L(数的全排)
- NYOJ 366 D的小L (DFS 全排列)
- nyoj366-nyoj19 全排序 DFS
- 全排列函数 nyoj 366(next_permutation()函数)
- nyoj366_D的小L_字典序_全排列
- NYoj 366 D的小L 【DFS】
- NYOJ 366 D的小L(从小到大输出排列。STL,next_permutation()函数的学习)
- nyoj 366 D的小L
- NYOJ366 D的小L next_permutation函数的用法
- NYOJ 366 STL 全排列
- nyoj 366 [【next_permutation()函数学习】