AC 代码

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int cols = scanner.nextInt();
    int rows = scanner.nextInt();
    int k = scanner.nextInt();
    String[] words = new String[k];
    for (int i = 0; i < k; i++) {
      words[i] = scanner.next();
    }
    String[][] dic = new String[rows][cols];
    for (int i = 0; i < rows; i++) {
      for (int j = 0; j < cols; j++) {
        dic[i][j] = scanner.next();
      }
    }
    boolean[][] visited = new boolean[rows][cols];
    for (String word : words) {
      for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
          if (find(dic, i, j, word, 0, visited)) {
            System.out.println(word);
          }
        }
      }
    }
  }

  private static boolean find(String[][] dic, int i, int j, String word, int k, boolean[][] visited) {
    if (k >= word.length()) {
      return true;
    }
    if (i = dic.length || j = dic[0].length || visited[i][j] || !dic[i][j].equals(word.charAt(k) + "")) {
      return false;
    }
    visited[i][j] = true;
    boolean f = find(dic, i - 1, j, word, k + 1, visited)
        || find(dic, i + 1, j, word, k + 1, visited)
        || find(dic, i, j - 1, word, k + 1, visited)
        || find(dic, i, j + 1, word, k + 1, visited);
    visited[i][j] = false;
    return f;
  }
}