zoukankan      html  css  js  c++  java
  • UVA 331 Mapping the Swaps

    UVA_331

    本来打算先用BFS找到最少的交换次数,但发现情况种数太多,数组放不下,后来发现原来用冒泡法排序的过程对应的就是最少的交换次数。

    得到最少的交换次数之后,只要限定深搜的层数,然后递归寻找一共有多少种交换方案即可。

    #include<stdio.h>
    #include
    <string.h>
    #include
    <stdlib.h>
    int a[5],target[5],num,n,ans;
    void dfs(int cur,int p[])
    {
    int i,k,q[5];
    if(cur==num)
    {
    if(memcmp(p,target,sizeof(target))==0)
    ans
    ++;
    return;
    }
    for(i=0;i<n-1;i++)
    {
    memcpy(q,p,
    sizeof(q));
    k
    =q[i];
    q[i]
    =q[i+1];
    q[i
    +1]=k;
    dfs(cur
    +1,q);
    }
    }
    int main()
    {
    int i,j,k,t,front,rear;
    t
    =0;
    while(1)
    {
    scanf(
    "%d",&n);
    if(n==0)
    break;
    memset(a,
    0,sizeof(a));
    for(i=0;i<n;i++)
    scanf(
    "%d",&a[i]);
    memcpy(target,a,
    sizeof(a));
    num
    =0;
    for(i=0;i<n;i++)
    for(j=n-1;j>i;j--)
    if(target[j]<target[j-1])
    {
    k
    =target[j];
    target[j]
    =target[j-1];
    target[j
    -1]=k;
    num
    ++;
    }
    if(num==0)
    {
    printf(
    "There are 0 swap maps for input data set %d.\n",++t);
    continue;
    }
    ans
    =0;
    dfs(
    0,a);
    printf(
    "There are %d swap maps for input data set %d.\n",ans,++t);
    }
    return 0;
    }

      

  • 相关阅读:
    Java8 新特性default
    Java Map操作
    Java List操作
    Java Set操作
    Java集合 List,Set,Map
    Java final,static 关键字
    Java ConcurrentHashMap
    Java Synchronized的用法
    Linux 基本收集
    HashMap 扩容 加载因子
  • 原文地址:https://www.cnblogs.com/staginner/p/2167822.html
Copyright © 2011-2022 走看看