UVA - 331 Mapping the Swaps

来源:互联网 发布:航迹规划 算法 编辑:程序博客网 时间:2024/06/16 04:20

题目大意:给一个整数数列排序,只能交换相邻数字,问交换次数最少的方法有几种。

解题思路:因为只允许交换相邻数字,冒泡就是交换次数最少的方法,保证不要进行无意义的交换,然后每完成一次排序次数 +1 即可。

#include<iostream> #include<cstdio>#include<cmath>#include<string>#include<stdlib.h>#include<algorithm>using namespace std;int num[10];int n, ans, tmp, cnt = 0;bool check() {    for (int i = 0; i < n-1; i++)        if (num[i] > num[i+1]) return false;    return true;}void dfs() {    if (check()) {        ans++;        return;    }    for (int i = 0; i < n-1; i++)        if (num[i] > num[i+1]) {            swap(num[i], num[i+1]);            dfs();            swap(num[i], num[i+1]);        }}int main() {    while (scanf("%d", &n) != EOF && n) {        for (int i = 0; i < n; i++)            scanf("%d", &num[i]);        ans = 0;        if (!check()) dfs();        printf("There are %d swap maps for input data set %d.\n", ans, ++cnt);    }return 0; }
0 0