如何解决通过递归查找是否在Hashmap <String,ArrayList <String >>中连接了两个字符串?
问题是要我们找出两家航空公司之间是否可能建立联系。对于输入代码,它们会向我们提供航空公司列表,然后列出哪些航空公司与哪些航空公司相连。我能够将所有内容读取到扫描仪中,并制作一个连接到String ArrayList的String哈希表,以补偿重复的键。 Hashmap没问题,因为在读取了所有键及其ArrayList中的对应值之后,一切都匹配了。
这是下面打印的Hashmap(一些航空公司未在下面列出,因为它们之间没有联系,即:西南):
continental,[america_west,air_china,alaska,air_france,virgin_atlantic]
austrian_airways,[delta]
virgin_atlantic,[air_france]
delta,[swiss_air,austrian_airways,air_canada]
america_west,[mesa,twa]
问题是调用递归,在给定两个航空公司字符串的情况下,查找是否存在连接。我在下面的递归操作是检查航空公司之间是否存在初始连接,并且没有递归地向内移动。但是,该错误似乎是堆栈溢出错误。我不明白为什么会溢出 如果测试用例给出了航空公司{“ delta”“ america_west”},{“ continental”“ mesa”},{“ southwest”“ delta”},{“ twa”“ air_france”}。
public static boolean recur(String a,String b) {
boolean connection = false;
if(partners.containsKey(a)&&partners.get(a).contains(b)) {return true;}
for(String airlines: (ArrayList<String>)partners.get(a)) {
if(partners.containsKey(airlines))
recur(airlines,b);
}
return connection;
}
编辑: 很抱歉,我没有包含所有代码,这是我第一次上传,而且我觉得它有点长。
公共舱航空公司合作伙伴{
static Map<String,ArrayList> partners = new HashMap<String,ArrayList>();
static String returnT = "PARTNERS\n";
static String returnF = "No miles for you\n";
int number = 0;
public static void readIn() throws Exception{
Scanner sc = new Scanner(new File("partners.dat"));
String[] temp = new String[2];
int airline = sc.nextInt();
for(int i = 0; i < airline; i++) {
sc.next();
}
int partner = sc.nextInt();
sc.nextLine();
for(int i = 0; i < partner; i++) {
temp = sc.nextLine().split(" ");
ArrayList<String> temps = new ArrayList<String>();
if(partners.containsKey(temp[0])) {
partners.get(temp[0]).add(temp[1]);
}
else {
temps.add(temp[1]);
partners.put(temp[0],temps);
}
}
Iterator<Map.Entry<String,ArrayList>> i = partners.entrySet().iterator();
while(i.hasNext()){String key = i.next().getKey();
System.out.println(key+","+partners.get(key));
}
int repeat = sc.nextInt();
sc.nextLine();
for(int m = 0; m < repeat;m++) {
temp= sc.nextLine().split(" ");
//System.out.println(temp[0] + " "+ temp[1]);
if(recur(temp[0],temp[1])) {
System.out.println(returnT);
}
else {
System.out.println(returnF);
}
}
}
public static boolean recur(String a,b);
}
return connection;
}
public static void main(String args[]) throws Exception
{
new airlinePartners().readIn();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。