-1
重み付けされていないグラフから最短経路を見つけて印刷する方法を見つけるには、特定の位置から開始し、次に2番目の整数が見つかるまで進みます。私はたくさんのことを試しましたが、何も私が探している結果を与えるものではありません。あなたの時間をありがとう、私は下のクラスを含めることになります。あなたが見てみる場合は重み付けされていないグラフの最短経路
public class graph {
int Vertices;
LinkedList<Integer> adjListArray[];
Hashtable hs;
Hashtable hs2;
graph(int vertices)
{
this.Vertices = vertices;
adjListArray = new LinkedList[vertices];
for(int i = 0; i < vertices ; i++){
adjListArray[i] = new LinkedList<>();
}
}
public void getHastables(Hashtable hs, Hashtable hs2) {
this.hs = hs;
this.hs2 = hs2;
}
public void addEdge(int v1, int v2)
{
adjListArray[v1].addFirst(v2);
adjListArray[v2].addFirst(v1);
}
public void printGraph()
{
for(int v = 0; v < Vertices; v++)
{
System.out.println("Adjacency list of vertex "+ v);
System.out.print("self");
for(Integer pCrawl: adjListArray[v]){
System.out.print(" -> "+pCrawl);
}
System.out.println("\n");
}
}
///////=================================================================================//////////
///////=================================================================================//////////
///////=================================================================================//////////
public void BFS(int start, int finish)
{
Map<Integer, Integer> prev = new HashMap<Integer, Integer>();
int s = start;
boolean visited[] = new boolean[Vertices];
LinkedList<Integer> queue = new LinkedList<Integer>();
LinkedList<Integer> parent = new LinkedList<Integer>();
visited[start]=true;
queue.add(start);
while (queue.size() != 0)
{
start = queue.poll();
if(start == finish) {
break;
}
else {
Iterator<Integer> i = adjListArray[start].listIterator();
while (i.hasNext())
{
int n = i.next();
if (!visited[n])
{
visited[n] = true;
queue.add(n);
prev.put(n,start);
}
}
parent.add(start);
}
}
if(start != finish) {
System.out.println("there is no path between" + hs2.get(s) + " and " + hs2.get(finish));
}
else {
System.out.println("Path between " + hs2.get(s) + " and "+ hs2.get(finish));
System.out.print(hs2.get(s) + "-->");
while(parent.size() != 0) {
System.out.println(hs2.get(parent.poll()));
}
//////////////////////////////////////////////
int pos = finish;
while(prev.get(pos)!=null) {
System.out.println("try2 for prev " + hs2.get(pos));
pos --;
}
私が参照してください!それは多くの意味がある、私はまだ私の反復はそのように見えるのですか?私は私のエッジに問題があるかもしれません。あなたの時間をありがとう! – DJM555
まあ、私はあなたのコードの唯一の間違った部分は、最短パスの回復であると仮定して、私が指定したロジックを取り、あなたのユースケースに適応させて、試した後に特定の質問があるかどうか尋ねることができます。 – AlexITC