码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1560 迭代加深搜索

时间:2014-12-18 22:10:21      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   io   color   os   sp   for   

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560

 

只能说bin神太给力了。。 又学到不少新知识。。

 

迭代加深搜索,貌似 又叫IDA*, 就是给搜索深度一个限制,搜索到一个满足条件就结束。 注意剪枝~

 

代码:

  

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char g[10][10];
int size[10];
char dna[4] = {A,C,G,T};
int n;

int dfs(int now, int l, int p[])//p[i]代表当前第i行字符串匹配了多少个了
{
    if(now > l)
        return 0;
    int maxn = 0;
    
    for(int i=0; i<n; i++)//剪枝,查找至少还需要多少深度
    {
        maxn = max(maxn, size[i] -p[i]);
    }
    
    if(maxn == 0)
    {
        return now;
    }
    
    if(now + maxn > l) //如果至少需要的深度加上当前的深度比限制深度大,那么就剪掉
        return 0;
    for(int i = 0; i<4; i++)
    {
        int flag = 0;
        int temp[10] = {0};
        for(int j = 0; j<n; j++)
        {
            if(g[j][p[j]] == dna[i])//满足条件
            {
                flag = 1;
                temp[j] = p[j] + 1;
            }
            else
                temp[j] = p[j];
        }
        if(flag == 1)//只有满足条件才递归下去
        {
            int t = dfs(now+1, l, temp);
            if(t != 0)
            {
                return t;
            }
        }
    }
    return 0;
}


int main()
{
    int num;
    cin>>num;
    
    int maxn = -1;
    while(num--)
    {
        maxn = -1;
        memset(size, 0, sizeof(size));
        scanf("%d", &n);
        
        for(int i=0;i <n; i++)
        {
            scanf("%s", g[i]);
            size[i] = strlen(g[i]);
            maxn = max(maxn, size[i]);
        }
        
        int ans;
        int p[10] = {0};
        for(int i=maxn; ; i++)
        {
            if(dfs(0, i, p))
            {
                ans = i;
                break;
            }
        }
        
        cout<<ans<<endl;
    }
    
    return 0;
}

 

hdu 1560 迭代加深搜索

标签:style   blog   http   ar   io   color   os   sp   for   

原文地址:http://www.cnblogs.com/ltwy/p/4172719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!