算法训练 排列问题
2016-03-28 22:55
399 查看
问题描述
求一个0~N-1的排列(即每个数只能出现一次),给出限制条件(一张N*N的表,第i行第j列的1或0,表示为j-1这个数不能出现在i-1这个数后面,并保证第i行第i列为0),将这个排列看成一个自然数,求从小到大排序第K个排列。
数据规模和约定
N<=10,K<=500000
输入格式
第一行为N和K,接下来的N行,每行N个数,0表示不能,1表示能
输出格式
所求的排列
样例输入
3 2
0 1 1
1 0 0
0 1 0
样例输出
1 0 2
解释:
对于N=3的没有任何限制的情况
第一:0 1 2
第二:0 2 1
第三:1 0 2
第四:1 2 0
第五:2 0 1
第六:2 1 0
根据题目所给的限制条件由于2不能出现在1后面,0不能出现在2后面
第一:0 2 1
第二:1 0 2
第三:2 1 0
求一个0~N-1的排列(即每个数只能出现一次),给出限制条件(一张N*N的表,第i行第j列的1或0,表示为j-1这个数不能出现在i-1这个数后面,并保证第i行第i列为0),将这个排列看成一个自然数,求从小到大排序第K个排列。
数据规模和约定
N<=10,K<=500000
输入格式
第一行为N和K,接下来的N行,每行N个数,0表示不能,1表示能
输出格式
所求的排列
样例输入
3 2
0 1 1
1 0 0
0 1 0
样例输出
1 0 2
解释:
对于N=3的没有任何限制的情况
第一:0 1 2
第二:0 2 1
第三:1 0 2
第四:1 2 0
第五:2 0 1
第六:2 1 0
根据题目所给的限制条件由于2不能出现在1后面,0不能出现在2后面
第一:0 2 1
第二:1 0 2
第三:2 1 0
#include <stdio.h> int N, K, count, key; int a[10][10], num[10]; void swap(int x, int y) { int t; t = num[x]; num[x] = num[y]; num[y] = t; } void sort(int from, int end) { int i, j, t; for(i=from; i<end; i++){ t = i; for(j=i+1; j<end; j++){ if(num[j] < num[t]){ t = j; } } swap(i, t); } } void print() { int i; for(i=0; i<N; i++){ printf("%d ", num[i]); } printf("\n"); } void arrange(int fromIndex) { if(fromIndex == N){ count ++; } if(count == K){ print(); key = 0; } int i; for(i=fromIndex; i<N; i++){ sort(fromIndex, N); swap(fromIndex, i); if(fromIndex == 0) arrange(fromIndex+1); else if (a[num[fromIndex-1]][num[fromIndex]] != 0){ arrange(fromIndex+1); } if(key == 0){ return; } } } int main() { int i, j; scanf("%d%d", &N, &K); for(i=0; i<N; i++){ for(j=0; j<N; j++){ scanf("%d", &a[i][j]); } } for(i=0; i<10; i++){ num[i] = i; } count = 0; key = 1; arrange(0); return 0; }
相关文章推荐
- 字典序—lexicographical order
- Spring JDBC学习笔记(1):查询数据库数据之JdbcTemplate的使用
- Android常见的泄露以及解决策略
- POJ 2418 简单trie树
- POJ 2418 简单trie树
- HDU 2795 线段树第三发!
- docker(2)
- Spring 依赖注入 @Autowired @Inject
- 单元测试:复利计算
- MyBatis学习总结(一)——MyBatis快速入门
- leetcode_082 Remove Duplicates from Sorted List
- c#观察者模式
- flash跨域策略文件crossdomain.xml配置详解
- Android——Intent.setClass()
- UI控件--ProgressBar
- 人生不能光溜溜的来,再光溜溜的走
- EXTJS之Ext.util.Observable自定义事件
- 设计模式(4)---装饰模式
- PHP语言 -- 基础
- 90. Subsets II