質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

199閲覧

JavaでBellmanFordを実装したい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/06/05 10:26

実現したいこと

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(" おわり"); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/06/05 11:08

Stack クラスが見つからないということですから、 関連クラスを import するとか自分で作るとかするのではないでしょうか。 ご自分で書いているのであれば何を使っているのか分かっているはずなのでは…。
退会済みユーザー

退会済みユーザー

2023/06/05 12:16

自分で書いたと書きましたがネット上にあるものを結構参考にして書いたところがあるので全部理解しているかと言われればそうではないので分かりません。
guest

回答1

0

ベストアンサー

エラーを見る限り、Stackをインポートする必要がありそうです。

import java.util.Stack;

また、calcメソッドの「。」も不要です (TYPOでしょうか?)

int calc() { int n = 0;。

投稿2023/06/05 13:54

neko_the_shadow

総合スコア2275

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問