我正在编写一个程序,该程序应该读取一个单词文件,然后通过从开始字到一个会有一个字母不同的相邻单词,找到一个单词到另一个单词中最短的一个,例如:Startword:dog endword :for可能是:“ dog-> fog-> for”。
我的想法是在相邻列表中进行BFS。除了我的Graph(相邻列表)之外,所有内容都在我的代码中运行。问题是我想将单词散列到图中的索引,但是为此需要知道列表的大小。
我首先添加一个包含整个单词表的向量,然后使用该向量的大小设置arraylist的大小,然后迭代该向量以将单词散列到arraylist中。
我的相邻列表的类型:
ArrayList<LinkedList<String>> adj_list;
这是我的用法:
public void adda(Vector<String> v){
M = v.size();
adj_list = new ArrayList<LinkedList<String>>(M);
for (int i = 0; i < M; i++){
add(v.get(i));
}
void add (String word){
int z = hash(word);
for (int i = z; i < M; i++){
if(adj_list.get(i)== null){
z=i;
adj_list.add(new LinkedList<String>());
break;
哈希函数:
public static int hash(String key) {
int i;
int v = 0;
for (i = 0; i < key.length(); i++) {
v += key.charAt(i);
}
return v % M;
我有一种强烈的感觉,就是添加一个向量以从中获取元素并将其添加到arraylist的想法足够愚蠢。但是,我无法提出任何更好的,可行的想法(而我现在拥有的也没有任何想法)。我是否应该使用邻接表?散列单词是个好主意还是有更好的方法?有谁了解我正在尝试创建哪种类型的程序,并且有任何想法可能会有所帮助?