题意:算有几种不同顺序的冒泡排序能使给出的数组从小到大排序
思路:DFS,但要记住,每交换一个之后在返回是,要记得再把两个数交换回来,才能进行下一个判断
#include<stdio.h>
#include<string.h>
int arr[10];
int num, n, t = 0;
void swap(int &a, int &b){
int temp;
temp = a;
a = b;
b = temp;
}
int isok(){
for(int i = 2; i <= n; i++)
if (arr[i] < arr[i - 1])
return 0;
return 1;
}
void dfs(){
if (isok()){
num++;
return;
}
for(int i = 1; i < n; i++){
if (arr[i] > arr[i + 1]){
swap(arr[i], arr[i + 1]);
dfs();
swap(arr[i], arr[i + 1]);
}
}
}
int main(){
while (scanf("%d", &n) && n){
num = 0;
arr[0] = -100000;
for(int i = 1; i <= n; i++)
scanf("%d", &arr[i]);
if (!isok())
dfs();
printf("There are %d swap maps for input data set %d.\n", num, ++t);
}
return 0;
}