実現したいこと
javaでBellmanFordを実装したいです。
前提
自分でコードを書いてみましたが下記の様なエラーが起こりました。
どのように書き換えらばいいのかを教えていただきたいです。
発生している問題・エラーメッセージ
BellmanFord.java:107: エラー: シンボルを見つけられません Stack<Node>stack = new Stack<Node>(); ^ シンボル: クラス Stack 場所: クラス BellmanFord BellmanFord.java:107: エラー: シンボルを見つけられません Stack<Node>stack = new Stack<Node>(); ^ シンボル: クラス Stack 場所: クラス BellmanFord エラー2個
該当のソースコード
public class BellmanFord{ class Node { String name; Link[] links; Link[] sl; int lsize; int cost; Node pathFrom; static final int infinity = 0x7fffffff; Node(String s) { name = s; sl = new Link[100]; // 最大100個までOK lsize = 0; cost = infinity; } void add(Link n) { sl[lsize] = n; lsize++; } void addFinish() { links = new Link[lsize]; for(int i = 0; i < lsize; i++) links[i] = sl[i]; } boolean isConnect(Node p) { if(links == null) return false; for(int i = 0; i < links.length; i++) { Link q = links[i]; if(q.from == p || q.to == p) return true; } return false; } void setCost(Node from,int c) { pathFrom = from; cost = c; } boolean equals(String s) { return name.equals(s); } boolean equals(Node n) { return name.equals(n.name);} } class Link { Node from; Node to; int cost; Node pathFrom; Link(int c) { cost = c; } Link(int c, Node f, Node t) { cost = c; from = f; to = t; if(f != null) f.add(this); if(t != null) t.add(this); pathFrom = null; } Node other(Node p) { if(p==from) return to; if(p==to) return from; return null; } } Node start,goal; Link[] allLink; public BellmanFord() { Node nodeA = new Node("A"); Node nodeB = new Node("B"); Node nodeC = new Node("C"); Node nodeD = new Node("D"); Node nodeE = new Node("E"); Node nodeF = new Node("F"); Node nodeG = new Node("G"); Node nodeH = new Node("H"); allLink = new Link[14]; allLink[0] = new Link(2,nodeA,nodeB); allLink[1] = new Link(3,nodeA,nodeC); allLink[2] = new Link(5,nodeB,nodeC); allLink[3] = new Link(4,nodeB,nodeE); allLink[4] = new Link(2,nodeB,nodeD); allLink[5] = new Link(2,nodeC,nodeD); allLink[6] = new Link(7,nodeC,nodeH); allLink[7] = new Link(6,nodeD,nodeE); allLink[8] = new Link(5,nodeD,nodeH); allLink[9] = new Link(1,nodeE,nodeF); allLink[10] = new Link(6,nodeF,nodeH); allLink[11] = new Link(5,nodeE,nodeG); allLink[12] = new Link(2,nodeF,nodeG); allLink[13] = new Link(5,nodeH,nodeG); nodeA.addFinish(); nodeB.addFinish(); nodeC.addFinish(); nodeD.addFinish(); nodeE.addFinish(); nodeF.addFinish(); nodeG.addFinish(); nodeG.addFinish(); start = nodeA; start.cost = 0; goal = nodeG; } Node[] search() { // printCost(start); while(calc()>0) ; // printCost(start); return getPath(); } Node[] getPath() { Stack<Node>stack = new Stack<Node>(); Node p = goal; while(p != null) { stack.push(p); p = p.pathFrom; } Node[] ans = new Node[stack.size()]; for(int i=0; i<ans.length; i++) ans[i] = stack.pop(); return ans; } int calc() { int n = 0;。 for(int i = 0; i < allLink.length;i++) { Link cur = allLink[i]; if(cur.from.cost < cur.to.cost) { if(cur.from.cost + cur.cost < cur.to.cost) { cur.to.setCost(cur.from, cur.from.cost+cur.cost); n++; } if(cur.to.cost + cur.cost < cur.from.cost) { cur.from.setCost(cur.to, cur.to.cost+cur.cost); n++; } } else { if(cur.to.cost + cur.cost < cur.from.cost) { cur.from.setCost(cur.to, cur.to.cost+cur.cost); n++; } if(cur.from.cost + cur.cost < cur.to.cost) { cur.to.setCost(cur.from, cur.from.cost+cur.cost); n++; } } } return n; } public static void main(String args[]) { BellmanFord bf = new BellmanFord(); Node[] path=bf.search(); for(int i = 0; i<path.length; i++) { if(i>0) System.out.print(","); System.out.print(path[i].name); } System.out.println(" おわり"); } }
Stack クラスが見つからないということですから、 関連クラスを import するとか自分で作るとかするのではないでしょうか。
ご自分で書いているのであれば何を使っているのか分かっているはずなのでは…。

自分で書いたと書きましたがネット上にあるものを結構参考にして書いたところがあるので全部理解しているかと言われればそうではないので分かりません。
Stack というクラスが私が知っている"スタック"クラス https://www.google.com/search?q=java+Stack&ie=UTF-8 かも分かりませんし、ご自身が分からなければ誰も分からないかも知れません。

回答1件
あなたの回答
tips
プレビュー