排列数算法A(n,m)(n>=m)

#include<iostream>
using namespace std;
int source[]={1,2,3,4,5,6,7,8,9},n=9,m=3,record[10],visited[10],counter=0;
void output()
{
	for(int i=0;i<m;i++)
		cout<<record[i]<<" ";
	cout<<endl;
}
void dfs(int step)
{
	if(step==m)
	{
		output();
		counter++;
		return ;
	}
	for(int i=0;i<n;i++)
	{
		if(visited[i]==0)
		{
			visited[i]=1;
			record[step]=source[i];
			dfs(step+1);
			visited[i]=0;
		}
	}
}
int main()
{
	dfs(0);
	cout<<counter<<endl;
	return 0;
}

时间: 2024-10-14 20:59:22

排列数算法A(n,m)(n>=m)的相关文章

C语言 &#183; 排列数

算法提高 排列数 时间限制:1.0s   内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入一个数n 求0~9十个数的全排列中的第n个(第1个为0123456789). 输入格式 一行,包含一个整数n 输出格式 一行,包含一组10个数字的全排列 样例输入 1 样例输出 0123456789 数据规模和约定 0 < n <= 10! 1 #include<stdio.h> 2 #includ

C语言 &#183; 排列数 &#183; 排列式

蓝桥练习场上不断碰到类似的题,都是一个递归搜索的套路. 算法提高 排列数 时间限制:1.0s   内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入一个数n 求0~9十个数的全排列中的第n个(第1个为0123456789). 输入格式 一行,包含一个整数n 输出格式 一行,包含一组10个数字的全排列 样例输入 1 样例输出 0123456789 数据规模和约定 0 < n <= 10! 作者注释:标准

生成所有错位排列的算法

所谓N元错位排列,就是指对应于1,2,--,N的N元排列Im(m=1,2,---,N),满足Im!=m,算法的目的是构造出所有这样的错位排列,依据的基本思想是回溯法,在沿栈向下试探的过程中逐步扩大部分错位排列的规模,当发现无法找到下一个部分错位排列的元素时就向上回溯,继续试探,当栈空间首元素stack[0]==N+1时,表明首元素为2,--,N的所有错位排列已全部试探得到,错位排列生成完毕,退出循环.这里给出算法,该算法生成对应于1,2,---,N的所有N元错位排列 代码(C++) 1 #inc

每日一小练——快速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:快速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有如下规律: 尝试寻找快速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了! 其实题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,不过因为求解快速方法在递归之前,我编写了一个非递归的算法 #include <iostream> usi

SCU 4424(求子集排列数)

A - A Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice SCU 4424 Description Time Limit: 1000ms Description Given N distinct elements, how many permutations we can get from all the possible subset of the eleme

第k个排列数

变长编码,这里排列的序号是0到n!-1,假设求 1,2,3,4 的第15个排列数,15/(3!) = 2, 余数是3,第一个数是(1,2,3,4)中的第二个数 3 (这里0是开始位置),3/(2!) = 1, 余数是1,第二个数就是(1,2,4)中的第一个数 2,  1/(1!) = 1, 余数是0,第三个数(1,4)中的第1个数就是4, 最后一个数就是1.结果就是3,2,4,1 #include <cstdio>#include <cstring>#include <vec

每日一小练——高速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: 尝试寻找高速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然非常easy,分分钟就超神..奥,不正确就攻克了! 事实上题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,只是由于求解高速方法在递归之前,我编写了一个非递归的算法 #include <iostrea

如何直观地理解排列数和组合数

如果要问我高中时学文科有什么不好,我觉得,最不好的一点就是在你上概率论课时,你听着老师讲的内容一脸蒙蔽,而其他同学纷纷表示自己高中时就已经学过了.之前做题遇到排列数与组合数都是直接写A和C,并不进行计算,所以对于其公式也只是记住能用就好,但是今天闲着无聊,想试着推导一下排列数和组合数的公式,也为了能深入理解排列数和组合数的原理,所以就开始了天马行空的想象. 对于排列数,可以视为“分步解决”的问题,也就是说: 第一步,从n个某物中选取1个,有n种选择方法: 第二步,从剩下的n-1个某物中选取1个,

java排列组合算法代码实现

原文:java排列组合算法代码实现 源代码下载地址:http://www.zuidaima.com/share/1550463479024640.htm java排列组合算法,有需要研究的童鞋可以下载,运行结果如下: package com.zuidaima.test; /** *@author www.zuidaima.com **/ public class Pailie { public static void main(String[] args) { int[] ia = {1, 2,