编写一个程序求解字谜游戏问题

问题描述:输入是由一些字母和单词构成的二维数组,目标是找出字谜中的单词,这些单词可以是水平、垂直或沿对角线以任何方向放置。
编写一个程序求解字谜游戏问题
t h i s 找出 this、two、fat、that
w a t s
o a h g
f g d t
分析:方向有8种
1从左到右 2从右到左
3从上到下 4从下到上
5从左上到右下 6从右下到左上
7从左下到右上 8从右上到坐下
已经头皮发麻
/**
     * @description: 问题描述:输入是由一些字母和单词构成的二维数组,目标是找出字谜中的单词,这些单词可以是水平、垂直或沿对角线以任何方向放置。
     *   编写一个程序求解字谜游戏问题
     *   t h i s     找出 this、two、fat、that
     *   w a t s
     *   o a h g
     *   f g d t
         分析:方向有8种
              1从左到右 2从右到左
              3从上到下  4从下到上
              5从左上到右下 6从右下到左上
              7从左下到右上 8从右上到坐下
            已经头皮发麻
     * @return: void
     * @author: mufeng
     * @time: 2020/4/25 10:37
     */
    @Test
    public void test3(){
        String[] words={"this","two","fat","that","dgf"};
        char[][] two_dimensional_char={{'t','h','i','s'},{'w','a','t','s'},{'o','a','h','g'},{'f','g','d','t'}};
        findWords(two_dimensional_char,words);
    }

    private void findWords(char[][] two_dimensional_char, String[] words) {
        //1从左到右
        //2从右到左
        for(int x=0;x<two_dimensional_char.length;x++){
            StringBuilder lr=new StringBuilder();
            StringBuilder rl=new StringBuilder();
            //1从左到右
            for(int y=0;y<two_dimensional_char[x].length;y++){
                lr.append(two_dimensional_char[x][y]);
            }
            //2从右到左
            for(int y=two_dimensional_char[x].length-1;y>=0;y--){
                rl.append(two_dimensional_char[x][y]);
            }
            for(int i=0;i<words.length;i++){
                //1从左到右
                if(lr.toString().contains(words[i])){
                    System.out.print(words[i]);
                    int i1 = lr.toString().indexOf(words[i]);
                    for(int z=i1;z<words[i].length();z++){
                        System.out.print("["+x+","+z+"]");
                    }
                    System.out.println();
                }
                //2从右到左
                if(rl.toString().contains(words[i])){
                    System.out.print(words[i]);
                    int i1 = rl.toString().indexOf(words[i]);
                    for(int z=rl.length()-1-i1;z>=0;z--){
                        System.out.print("["+x+","+z+"]");
                    }
                    System.out.println();
                }
            }
        }
       //5从左上到右下 6从右下到左上(简单)
        //7从左下到右上 8从右上到坐下(简单)
        //3从上到下  4从下到上
        // 对角线翻转,打印需要旋转之前的
        tochar(two_dimensional_char);
    }
    public char[][] tochar(char[][] chars){
        char[][] toarr=new char[chars.length][chars.length];
        int k=0;
        for(char[] x:chars){
            for(int i=0;i<x.length;i++){
                toarr[i][k]= chars[k][i];
            }
            k++;
        }
        return toarr;
    }

代码还未写完,思路已经很明确

原文地址:https://www.cnblogs.com/mufeng07/p/12776346.html