美文网首页NOIP之路
单词接龙 DFS 洛谷P1019

单词接龙 DFS 洛谷P1019

作者: 静_谷 | 来源:发表于2018-06-11 14:54 被阅读8次

主要是字符串拼接处理比较麻烦(下见mix函数),DFS还是比较简单的

鉴定

读题有坑 注意max_初始化

短小精悍(?)的深搜代码:

#include <iostream>
#include <string>
using namespace std;
int n,max_;
string str[20];
int b[20];
int mix(string str1, string str2) {//如果没有重叠部分就返回-1,否则返回重叠部分开始的位置
    for(int k=str1.size()-1; k>=0; k--) {//贪心,为了让合并后的字符串尽量长一定要从后往前判断
        bool r=1;
        int i_2=0;
        for(int i=k; i<=str1.size()-1; i++) {
            if(!(i_2<=str2.size()-1)) {//判断str2边界
                r=0;
                break;
            } else if(str1[i]!=str2[i_2]) {
                r=0;
                break;
            }
            i_2++;
        }
        if(r) return k;
    }
    return -1;
}
void search(int cur, string s) {
    bool bb=1;//bb规定:0表示有至少一个解,1表示此情况无解
    for(int i=0; i<n; i++)
        if(b[i]<=1) {//注意每个单词可以用两次
            bb=0;
            int t=mix(s,str[i]);
            if(t!=-1) {
                string news;
                for(int i=0; i<=t-1; i++)
                    news+=s[i];
                news+=str[i];//合并两个字符串
                b[i]+=1;
                search(cur+1, news);
                b[i]-=1;
            }
        }
    if(bb&&max_<s.size())
        max_=s.size();//更新max_
}
int main() {
    ios::sync_with_stdio(false);//cin cout速度嗖嗖嗖
    cin>>n;
    for(int i=0; i<=n-1; i++)
        cin>>str[i];
    char a;
    cin>>a;
    for(int i=0; i<n; i++)
        if(str[i][0]==a) {//枚举每个以字符a开头的字符串
            b[i]=1;
            string t=str[i];
            if(max_<t.size()) {
                max_=t.size();//初始化max_
            }
            search(0, t);//开搜!
            b[i]=0;
        }
    cout<<max_;
    return 0;
}

相关文章

  • 单词接龙 DFS 洛谷P1019

    主要是字符串拼接处理比较麻烦(下见mix函数),DFS还是比较简单的 鉴定 读题有坑 注意max_初始化 短小精悍...

  • 洛谷P1219八皇后-dfs

    题目传送:洛谷P1219八皇后 dfs

  • LeetCode-127-单词接龙

    LeetCode-127-单词接龙 127. 单词接龙[https://leetcode-cn.com/probl...

  • 【洛谷】DP-过河卒

    一、题目 二、做题总结 本题之前在ZSC上是做过的,当初用的是DFS深度搜索,这次在洛谷上还是原来的思路,却被提示...

  • 单词接龙

    10.06 [codevs] 单词接龙题记 题目: 题目描述 Description 输入描述 Input Des...

  • 单词接龙

    题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWo...

  • leetcode79 单词搜索

    题目 单词搜索 分析 解法:dfs没啥可讲的,dfs初级练习题目(当然bfs也没问题)。 代码

  • DFS & 位运算 | 洛谷P1219 八皇后

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包...

  • leetcode212 单词搜索II

    题目 单词搜索II 暴力解法 暴力解法就是用leetcode79 单词搜索这题的搜索一个单词的dfs方法,挨个搜索...

  • Leetcode.140.Word Break II

    题目 给定一个句子和一组单词, 单词可以重复, 列出单词组成句子的情况. 思路1 递归.效率低. 思路2 DFS....

网友评论

    本文标题:单词接龙 DFS 洛谷P1019

    本文链接:https://www.haomeiwen.com/subject/iakheftx.html