输出排列

#include <iostream>
using namespace std;

int count = 0;
#define MAX 4

void swap( char *a, char *b){
	char tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}

/**
* (全排列:A(m,n)且m==n)
* 全排列是这样的:第一个位置有n种方法,第二个位置n-1种方法...
* 从第一个位置开始,循环将每一个后面的值都交换到第一个位置来,
* 每次放好第一个位置之后,递归求解接下来后面的序列的全排列。
* 每次递归用k来指明正在放的是哪个位置。
*
* 每次递归的时候,剩下的元素里面,每个元素都有机会放在第一个位置(交换)。
*/
void permutation(char a[], int n, int begin){
	if(begin == n){
		//递归结束,输出当前排列好的序列
		for(int i=0;i<n;i++)
			cout<<a[i];
		cout<<"  ";
		count++;
	}
	else{
		//注意从位置k开始
		for(int i=begin;i<n;i++){
			swap(&a[begin], &a[i]);
			permutation(a, n, begin+1);    //递归求解位置begin+1开始的全排列
			swap(&a[begin], &a[i]);        //还原
		}
	}
}

/**
* (可重复的全排列)
* 第一个位置有n中方法,第二个位置有n中方法,...第n个位置有n中方法
* 重新声明一个同样大小的数组来存放结果,每次递归用k来指明正在放的
* 是哪个位置。
*/
void permutation_2(char a[], char b[], int begin, int n){
    //n个位置全部放置完成,输出  
	if(begin == n){
		for(int i=0;i<n;i++)
			cout<<b[i];
		cout<<"("<<count<<") ";
		count++;
	}
	else{
		//在第k个位置尝试放置每一个a[i]
		for(int i=0;i<n;i++){
			b[begin] = a[i];
			permutation_2(a,b,begin+1,n); //递归处理第begin+1个位置
		}
	}
}

int number = 0;
void sub_set2(char a[], int n, char b[], int begin, int k){
	if(k == 0){
		//放置完成,输出
		for(int i=0;i<begin;i++)
			cout<<b[i];
		cout<<"("<<number++<< ")  ";
		return;
	}
	
	//在位置begin尝试每一个a[i]
	for(int i=0;i<n;i++){
		b[begin] = a[i];
		sub_set2(a, n, b, begin+1, k-1); //递归下一个位置
	}
}

/**
* {a,b,c,d}: 子排列,A(1,n),A(2,n)...A(n,n) 并且可重复
* 即a,b,c,d, aa,ab,ac,ad,ba,bb,bc,bd, aaa,aab ,aac,aad,aba, abb...
*/
void permutation_3(char a[]){
	char b[MAX];
	count = 0;
	for(int i=1;i<=MAX;i++)
		sub_set2(a, MAX, b, 0, i);
}


int main(){
	char a[MAX] = {'a' ,'b' ,'c' ,'d' };
	char b[MAX];
	
	cout<<"\n=== 全排列 ===" <<endl;
	permutation(a, MAX, 0);
	cout<<"count:" <<count<<endl;
	
	cout<<"\n=== 可重复的全排列 ===" <<endl;
	count = 0;
	permutation_2(a, b, 0, MAX);
	cout<<"count:" <<count<<endl ;
	
	cout<<"\n=== 子全排列 ===" <<endl;
	permutation_3(a);
	return 0;
}
裂缝目标检测数据集 一、基础信息 数据集名称:裂缝目标检测数据集 图片数量: 训练集:462张图片 验证集:21张图片 测试集:9张图片 总计:492张图片 分类类别: crack(裂缝):指物体表面的裂缝,常见于建筑、基础设施等场景,用于损伤检测和风险评估。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式兼容常见深度学习框架。 二、适用场景 建筑与基础设施检查: 数据集支持目标检测任务,帮助构建能够自动识别裂缝区域的AI模型,用于建筑物、道路、桥梁等结构的定期健康监测和维护。 工业检测与自动化: 集成至智能检测系统,实时识别裂缝缺陷,提升生产安全和效率,适用于制造业、能源等领域。 风险评估与保险应用: 支持保险和工程行业,对裂缝进行自动评估,辅助损伤分析和风险决策。 学术研究与技术开发: 适用于计算机视觉与工程领域的交叉研究,推动目标检测算法在现实场景中的创新应用。 三、数据集优势 精准标注与任务适配: 标注基于YOLO格式,确保边界框定位准确,可直接用于主流深度学习框架(如YOLO、PyTorch等),简化模型训练流程。 数据针对性强: 专注于裂缝检测类别,数据来源于多样场景,覆盖常见裂缝类型,提升模型在实际应用中的鲁棒性。 实用价值突出: 支持快速部署于建筑监测、工业自动化等场景,帮助用户高效实现裂缝识别与预警,降低维护成本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值