• hust 1605 Gene recombination 广搜


    题意:第一个字符串变成第二个字符串最少要几步

    两种操作:1.左移一位。2.交换第一位和第二位

    求最少步数,直接广搜,但是如果用十进制,要用 long long 会超时,如果用字符串,会超内存。在int范围内可以用4进制或5进制

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    #include <string>
    #include <math.h>
    #include <map>
    using namespace std;
    char a[15],b[15];
    int n,m,len,tp;
    map<int,int>vis;
    int solve(char c)
    {
        if(c=='A') return 1;
        if(c=='C') return 2;
        if(c=='G') return 3;
        if(c=='T') return 4;
    }
    int op1(int k)
    {
        int d[15];
        for(int i=0; i<len; i++)
        {
            d[i]=k%5;
            k/=5;
        }
        k=0;
        swap(d[len-1],d[len-2]);
        for(int i=len-1; i>=0; i--)
        {
            k=k*5+d[i];
        }
        return k;
    }
    int op2(int k)
    {
        int d[15];
        for(int i=0; i<len; i++)
        {
            d[i]=k%5;
            k/=5;
        }
        for(int i=len; i>=1; i--)
            d[i]=d[i-1];
        d[0]=d[len];
        k=0;
        for(int i=len-1; i>=0; i--)
        {
            k=k*5+d[i];
        }
        return k;
    }
    void bfs()
    {
        vis.clear();
        queue<int>q;
        q.push(n);
        while(!q.empty())
        {
            tp=q.front();
            q.pop();
            if(tp==m) return;
            int tem1=op1(tp);
            int tem2=op2(tp);
            if(!vis[tem1]&&tem1!=tp)
            {
                vis[tem1]=vis[tp]+1;
                q.push(tem1);
            }
            if(!vis[tem2]&&tem2!=tp)
            {
                vis[tem2]=vis[tp]+1;
                q.push(tem2);
            }
        }
    }
    int main()
    {
        while(scanf("%d",&len)!=EOF)
        {
            scanf(" %s",a);
            scanf(" %s",b);
            n=m=0;
            for(int i=0; i<len; i++)
            {
                n=n*5+solve(a[i]);
                m=m*5+solve(b[i]);
            }
            bfs();
            printf("%d
    ",vis[m]);
        }
        return 0;
    }
  • 相关阅读:
    Linux 安装nginx
    Linux服务器svn与项目同步
    Linux服务器安装svn
    Thinkphp5模板继承
    Thinkphp5 Route用法
    一键切换hosts文件
    lnmp手动新建虚拟机
    wamp 配置虚拟主机
    百度编辑器
    百度编辑器:上传图片二
  • 原文地址:https://www.cnblogs.com/zuferj115/p/5248889.html
Copyright © 2020-2023  润新知