数字全排列
2015-08-06 11:06
274 查看
学长给我们的全排列的代码。
这个是没去重的,从已知arr数组里挑n个数进行排列
这个是去重的
这个是自己稍改了一下,从小到大排
这个是没去重的,从已知arr数组里挑n个数进行排列
#include <cstdio> int n,m,a[10],arr[10]={3,4,5,6}; void dfs(int v){ if(v >= n){ for(int i = 0;i<n;i++) printf("%d ",a[i]); printf("\n"); return ; } for(int i = 0; i<m;i++){ a[v] = arr[i]; dfs(v+1); } } int main(){ while(scanf("%d%d",&n,&m)==2){ dfs(0); } }
这个是去重的
#include <cstdio> #include <cstring> int n,m,a[10],arr[10]={3,4,5,6},mark[10]; void dfs(int v){ if(v >= n){ for(int i = 0;i < n;i++) printf("%d ",a[i]); printf("\n"); return ; } for(int i = 0; i< n;i++){ if(!mark[i]){//用过的标记去重 mark[i] = 1; a[v] = arr[i]; dfs(v+1); mark[i] = 0; } } } int main(){ while(scanf("%d",&n)==1){ memset(mark,0,sizeof(mark)); dfs(0); } }
这个是自己稍改了一下,从小到大排
#include <cstdio> #include <cstring> #include<algorithm> using namespace std; int n,m,a[10],arr[10]={3,4,5,6},mark[10]; void dfs(int v){ if(v > n){ for(int i = 1;i <= n;i++) printf("%d ",a[i]); printf("\n"); return ; } for(int i = 0; i< n;i++){ //if(!mark[i]){//这种是主函数里进行排序之后就不用比较了 if(!mark[i]&&arr[i]>a[v-1]){//这种就比较一下而已 mark[i] = 1; a[v] = arr[i]; dfs(v+1); mark[i] = 0; } } } int main(){ while(scanf("%d",&n)==1){ memset(mark,0,sizeof(mark)); //sort(arr,arr+4); a[0]=0; dfs(1); } }
相关文章推荐
- android图片处理
- 南邮 OJ 1732 还是质数
- 类成员的指针
- iPhone开发入门系列1(iOS8+Swift版)天天打靶APP学习12-14
- 工作反思2
- Magento 开启Compilation预编译 网站无法打开
- C(4)
- HDU 2897 (巴什博弈)
- dialog的各类显示方法
- Caliburn.Micro with WPF TabControl
- 2.7-xargs和execx详解
- Android开源库
- poj 2454 Jersey Politics(贪心+随机化)
- ps学习笔记三(绘画与修饰工具组)
- 19. Element id 属性
- BitmapFactory.Options.inSampleSize用法
- 南邮 OJ 1730 数字金字塔
- Rman--备份命令
- Android SQLite数据库创建和使用实战(一)
- eclipse启动出现“An Error has Occurred. See the log file”解决方法