全排列问题
2016-05-07 00:10
246 查看
方法一:能列出但是不是很完美,代码如下:
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; int a[100]; void swap(int *p,int *q) { int t; t = *p; *p = *q; *q = t; } void prim(int a[],int k,int m) { int i, j; if( k==m ) { for( i = 1; i <= m; i++ ) { printf(i==1?"%d":" %d",a[i]); } printf("\n"); } else for( j = k; j <= m; j++ ) { swap(&a[k],&a[j]); prim( a,k+1,m ); swap(&a[k],&a[j]); } } int main() { int i, n; while( ~scanf("%d",&n) ) { for( i = 1; i <= n; i++ ) { scanf("%d",&a[i]); } prim(a,1,n); printf("\n"); } return 0; }方法二:方法一的优化版,相当于线段上的搜索
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; int cnt; int flag[100]; int a[100]; int b[100]; int n; void dfs(int a[],int cnt) { int i; if( cnt==n+1 ) { for( i = 1;i <= n;i++ ) { printf(i==1?"%d":" %d",b[i]); } printf("\n"); return ; } for( i = 1;i <= n;i++ ) { if( flag[i]==0 ) { flag[i] = 1; b[cnt] = a[i]; dfs(a,cnt+1); flag[i] = 0; } } } int main() { int i; while( ~scanf("%d",&n) ) { cnt = 0; memset(flag,0,sizeof(flag)); for( i = 1;i <= n;i++ ) { scanf("%d",&a[i]); } dfs(a,1); printf("\n"); } return 0; }
相关文章推荐
- Spring 简介
- js Dom对象的属性与方法
- MATLAB函数freqz()
- Qt 嵌入式 利用wpa_supplicant编写WIFI、有线网络管理器
- 使用AlarmManager实现Android应用每天定时执行任务
- SpringMVC实现国际化(i18n)
- 对照Java学习Swift--继承(Inheritance)
- 凸优化之优化、对偶、KKT-七月算法(julyedu.com)4 月机器学习算法班学习笔记
- Git操作切换本地帐号
- Java千百问_06数据结构(008)_null属于哪种数据类型
- 天马行空
- Mybatis工具类
- 自定义布局CenterLayout
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- SpringMVC访问静态文件
- if top实时监控参考
- Android的jni或者是ndk的创建步骤
- Xcode
- git 撤销commit
- 国外网络穿透到国内看国内优酷爱奇艺等视频