Adjecencyマトリックスを使用してBFS

チャンダンニック:

BFSのパスを見つけるための質問,,グラフは、このしかし、などのようなグラフのBFSを解決するためにどのように隣接行列を適用することはできません、0,1,2,3,4としてマークされた頂点を持っている場合、私は、コードBFSパスにできています私はコード化されたもの5,10,15,20-添付画像

解決

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Bfs {
        public static void bfsTraversal(int[][] adjMatrix) {
           Queue<Integer> pendingVertices = new LinkedList<>();
           boolean[] visited = new boolean[adjMatrix.length];
           visited[0] = true;
           pendingVertices.add(0);

           while (!pendingVertices.isEmpty()) {
              int currentVertex = pendingVertices.poll();
              System.out.print(currentVertex + " ");
              for (int i = 0; i < adjMatrix.length; i++) {
                  if (adjMatrix[currentVertex][i] == 1 && !visited[i]) {
                    pendingVertices.add(i);
                    visited[i] = true;
                  }
              }
           }
       }

       public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       int v = s.nextInt();
       int e = s.nextInt();
       int[][] adjMatrix = new int[v][v];
       for (int i = 0; i < e; i++) {
           int v1 = s.nextInt();
           int v2 = s.nextInt();
           adjMatrix[v1][v2] = 1;
           adjMatrix[v2][v1] = 1;
       }
       bfsTraversal(adjMatrix);
   }
}

頂点0,1,2,3,4のようなBFSへの質問...

私は、頂点5,10,15,20などのBFSのためにこれを解決したいです...

そして、私はこのようなグラフのために同じことをやりたい,,ロジックを取得することはできません

StackExchange123:

もし数値の範囲がわかっている場合は、番号5、10、15及び20は、ノードのIDがよく、別々のアレイ内のノードのインデックスを格納させることができます。配列の名前はIndexLookupArrayあるとし、あなたがIDを持つノードのインデックスを検索したい場合は、[X] IndexLookupArrayでそれを見つけることができますxは。そして、コードの残りの部分は同じでなければなりません。番号の範囲は不明であるか、それが配列に収まるように大きすぎる場合は、例えば、ハッシュマップ内のインデックスを格納し、同じことを行うことができます。

あなたはこのような何かを書くことができます。

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Bfs {
        public static void bfsTraversal(int[][] adjMatrix) {
           Queue<Integer> pendingVertices = new LinkedList<>();
           boolean[] visited = new boolean[adjMatrix.length];
           visited[0] = true;
           pendingVertices.add(0);

           while (!pendingVertices.isEmpty()) {
              int currentVertex = pendingVertices.poll();
              System.out.print(currentVertex + " ");
              for (int i = 0; i < adjMatrix.length; i++) {
                  if (adjMatrix[currentVertex][i] == 1 && !visited[i]) {
                    pendingVertices.add(i);
                    visited[i] = true;
                  }
              }
           }
       }

       public static void main(String[] args) {
         Scanner s = new Scanner(System.in);

         int idx = 0;
         int range = s.nextInt();
         int v = s.nextInt();
         int e = s.nextInt();

         int[] IndexLookupArray = new int[range + 1]; // range + 1 since IndexLookupArray[range] should be accessible.
         int[][] adjMatrix = new int[v][v];

         Arrays.fill(IndexLookupArray, 0, range + 1, -1);

         for (int i = 0; i < e; i++) {
           int v1 = s.nextInt();
           if (IndexLookupArray[v1] == -1)
           {
             IndexLookupArray[v1] = idx;
             idx++;
           }
           v1 = IndexLookupArray[v1];

           int v2 = s.nextInt();
           if (IndexLookupArray[v2] == -1)
           {
             IndexLookupArray[v2] = idx;
             idx++;
           }
           v2 = IndexLookupArray[v2];

           adjMatrix[v1][v2] = 1;
           adjMatrix[v2][v1] = 1;
       }
       bfsTraversal(adjMatrix);
   }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=31568&siteId=1