uva 331 Mapping the Swaps 求交换排序的map 纯DFS

来源:互联网 发布:网络摄像头密码重置 编辑:程序博客网 时间:2024/04/28 22:39

给出一个序列,每次交换两个数,求有几种交换方法能使序列变成升序。

n不大于5,用dfs做。

代码:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int num[8], ans, n;bool check() {//check if the array is inorderfor (int i = 0; i < n - 1; i++)if (num[i] > num[i + 1])return false;return true;}void dfs(void) {for (int i = 0; i < n - 1; i++)if (num[i] > num[i + 1]) {swap(num[i], num[i + 1]);if (check())ans++;elsedfs();swap(num[i], num[i + 1]);}}int main () {int cas = 0;while (scanf("%d", &n) && 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, ++cas);}return 0;}


原创粉丝点击