UVA 331 Mapping the Swaps
题目大意:给出一组数,相邻位置可以交换,求从从小到大排列有几种不同的排列法(不做无用功)
解题思路:dfs回溯
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int num[6];
int n;
int s;
int jud() {
for(int i = 0; i < n-1; i++) {
if(num[i] > num[i+1])
return 0;
}
return 1;
}
void dfs() {
if(jud()) {
s++;
return;
}
for(int i = 0; i < n - 1; i++) {
if(num[i] > num[i+1]) {
int t = num[i];
num[i] = num[i+1];
num[i+1] = t;
dfs();
t = num[i];
num[i] = num[i+1];
num[i+1] = t;
}
}
}
int main() {
int x = 0;
while(cin >> n && n) {
x++;
for(int i = 0; i < n; i++) {
cin >> num[i];
}
s = 0;
if(!jud()) {
dfs();
}
printf("There are %d swap maps for input data set %d.\n", s, x);
}
return 0;
}