http://acm.hdu.edu.cn/showproblem.php?pid=1181
中文体面,想必都能理解,就不做解释了。
第一次用java写深搜,写的不好的地方,大佬们轻喷!!!
把每次搜过的单词都标记一下,防止死循环喽!
直接上代码(暴力就完了):
import java.text.DecimalFormat; import java.util.*; public class Main { private static char[] start = new char[1000]; private static char[] end = new char[1000]; private static int top = 0; private static boolean[] ok = new boolean[1000]; private static boolean sign = false; public static void main(String[] args) { Scanner cin = new Scanner(System.in); DecimalFormat ff = new DecimalFormat("0.0"); Main val = new Main(); String bm; while (cin.hasNext()) { bm = cin.next(); while (!bm.equals("0")) { ok[top] = false; start[top] = bm.charAt(0); end[top++] = bm.charAt(bm.length() - 1); bm = cin.next(); } for (int i = 0; i < top; i++) { if (start[i] == 'b') { //先找到第一个字母是“b”的单词 ok[i] = true; val.DFS(i); } if (sign) break; } if (sign) { sign = false; //重新把标记归零 top = 0; System.out.println("Yes."); } else { sign = false; top = 0; System.out.println("No."); } } } public void DFS(int x) { if (end[x] == 'm') { sign = true; return; } for (int i = 0; i < top; i++) { if (!ok[i] && start[i] == end[x]) { ok[i] = true; DFS(i); ok[i] = false; if (sign) return; } } } }