学易优
始于2008年专业教育平台
  • 地区

免费发布课程

学易优网
咨询热线:400-099-6980
学易优网
了解更多 快扫我吧

首页 > 备考指南 > 职业技能 > 正文

JAVA“图”用法——图搜索解决成语接龙 文  /风飞扬2017年02月22日 15:350

摘要 成语接龙大家肯定都玩过,那么电脑自己完成接龙你是否见到过呢?下面就带你领略一下不一样的成语接龙!

还记得小时候,老师经常在课堂上让我们玩成语接龙的游戏,现在想想那都是好遥远的事情了。现在如果我告诉你我可以让电脑自己实现成语甚至是歌词接龙,你会相信吗?下面就和小编一起来见识一下吧!

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
import java.util.TreeMap;
import java.util.TreeSet;
/**
 * 利用图搜索解决接龙(歌词接龙或者成语接龙)的问题
 *程序输出:
(1)[一个人哭, 哭天抹泪, 泪如雨下, 下辈子也要找到你, 你你你为了爱情, 情凭谁来定错对, 对答如流, 流星, 星星知我心, 心安理得, 得到你的人却得不到你的心, 心平气和, 和蔼可亲, 亲亲我的宝贝, 贝多芬的悲伤, 伤了我的心, 心旷神怡, 怡然自得, 得意的笑]
(2)[一个人的寂寞两个人的错, 错爱, 爱, 爱上你, 你快回来, 来生不分手, 手放开, 开怀大笑, 笑看风云, 云树之思, 思念, 念念不忘, 忘不掉的伤, 伤声, 声泪俱下, 下辈子再爱你, 你怎么舍得我难过, 过火, 火日炙人]
(3)[一人有一个梦想, 想你, 你把我的女人带走, 走马看花, 花心, 心痛, 痛不欲生, 生生世世爱, 爱上你是一个错, 错过你错过爱, 爱上她是为了忘了你, 你的柔情我永远不, 不, 不后悔, 悔恨交加, 加油中国, 国足欢迎你, 你的柔情我永远不懂, 懂你]
(4)[一分为二, 二人同心, 心雨, 雨爱, 爱你十分泪七分, 分手了就不要再想我, 我叫小沈阳, 阳春白雪, 雪上加霜, 霜气横秋, 秋月春花, 花海, 海上花, 花红柳绿, 绿叶对根的情意, 意气风发, 发如雪, 雪窖冰天, 天下]
 */
public class CycleWords {
    public static void main(String[] args) {
        Listlist = new LinkedList();
        fileInsert("popsong.txt", list);
        fileInsert("word.txt", list);
        TreeMap graph = new TreeMap();
        for (String x : list) {
            TreeSetxAdj = new TreeSet();
            for (String y : list) {
                if (x.equals(y))
                    continue;
                if (x.charAt(x.length() - 1) == y.charAt(0))
                    xAdj.add(y);
            }
            graph.put(x, xAdj);
        }
        System.out.println(graph);
        char start = '一';
        int len = 20;
        HashMap visited = new HashMap();
        for (String s : graph.keySet())
            visited.put(s, false);
        Stackroute = new Stack();
        for (String s : graph.keySet()) {
            if (s.charAt(0) == start && search(s, graph, len, visited, route)) {
                System.out.println(route);
            }
        }
    }
/**
 * 文件输入,测试文件用了500个成语和800个流行歌曲的名字,
 * @param string
 * @param list
 */
    private static void fileInsert(String string, Listlist) {
        try {
            Scanner cin = new Scanner(new File(string));
            while (cin.hasNextLine()) {
                String line = cin.nextLine().trim();
                if (line.isEmpty())
                    continue;
                if (!line.contains("."))
                    line = "." + line;
                if (!line.contains("("))
                    line = line + "(";
                int start = line.indexOf('.');
                int end = line.indexOf('(');
                String cur = line.substring(start + 1, end);
                // System.out.println(cur);
                list.add(cur);
            }
            cin.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
/**
 * 接龙递归求解程序
 * @param s  起始汉字
 * @param graph 
 * @param len 链条长度
 * @param visited 避免出现自环
 * @param route 链条(成语序列存储在其中)
 * @return
 */
    private static boolean search(String s,
            TreeMap graph, int len,
            HashMap visited, Listroute) {
        if (len == 1)

            return true;
        for (String t : graph.get(s)) {
            ListsubList = new LinkedList<>();
            visited.put(s, true);
            if (visited.get(t) == false
                    && search(t, graph, len - 1, visited, subList)) {
                route.clear();
                route.add(s);
                route.addAll(subList);
                return true;
            }
        }
        return false;
    }
}

如果您刚好和我一样对IT感兴趣,不管你有没有基础,之前是否接触过,您都可以关注我们的微信公众号:xueyeyou . 我们会不定期更新此类的益智小游戏,您也可以加入我们的培训班一起学习哦!



阅读上一篇:同等学力考研必知的50个问题汇总

阅读下一篇:奥地利留学奖学金介绍


发表评论

暂无评论

在线投稿

亲,请先登录呦~
关于我们
关于学易优
企业理念
网站地图
联系我们
报名指南
求学登记
报名流程
帮我选课
付款方式
招生合作
机构合作
会员服务
网站加盟
广告服务
学员专享
专享礼遇
积分制度
客服中心
咨询热线
400-099-6980
周一至周日:
8:00-22:00