算法训练 单词接龙

算法训练 单词接龙_第1张图片


算法训练 单词接龙_第2张图片

思路:

1.算出两两字符串之间的 【 尾首相连】  最小重合部分长度(长度为0不算);
2.用一个大小为n的集合数组arr ,arr[i] 代表【第i个字符串】的【邻接集合】,集合里面存放可以邻接的字符串【所在位置】;
3.从每个开头为 【字符c】  的字符串开始深搜,取得最长的龙;

4.这个题的细节之处非常多:

1.字符串可以出现两次

2.【尾首相连】长度尽可能短(但是不能为零),这样两个字符串连出来的新串最 长;

3.深搜的终点设置小技巧;

以下是具体代码:

import java.util.ArrayList;
import java.util.Scanner;
public class Zfc {
	public static void main(String[] args) {
		Z z = new Z();
	}
}
class Z{
	int n;//字符串个数
	String[] ss;//存储字符串的数组
	int[][] map;//存放两两字符串接龙矩阵
	ArrayList[] arrs;//arrs[i]存放第i个字符串可以接的字符串
	int[] vis;// vis[i]表示第i个字符串还可以使用的次数
	int max = Integer.MIN_VALUE;
	String c;//开头字符
	public Z(){
		Scanner sca = new Scanner(System.in);
		n = sca.nextInt();
		ss = new String[n];
		map = new int[n][n];
		arrs = new ArrayList[n];
		vis = new int[n];
		for(int i=0;i();
			for(int j=0;jmax){
				max = sum;
			}
		}
	}
}



你可能感兴趣的:(蓝桥杯,dfs)