3

行き詰まっているので、よろしくお願いします。私はこの形式で入力しました:

6<-頂点の数

0 12<-エッジによって頂点0に直接リンクされている頂点

1 0 3 4

私は私のプログラムでこれを次のようにする必要があります:

int[][] edges = {
   {0,1}, {0,2}, 
   {1,2}, {1,3}, 
   {2,5},
   {3,2}, {3,4},
   {5,4}
};

私は行き詰まりました、そして私はリストで働かなければならないかもしれないと思いますか?これは私がこれまでに持っていたものです:

public class Part1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int k = scanner.nextInt(); // number of vertices
        String[] input = new String[k];
        int[][] edges;
        String[] tokens = new String[k];
        int[] vertices = new int[k];
        int[] integers = new int[k];
        int p = 0;

        for (int i = 0; i < k; i++) {
            vertices[i] = i;
            input[i] = scanner.nextLine();
            tokens = input[i].split("[\\s+]");
            integers[i] = Integer.parseInt(tokens[i].trim());
            for (int j = 0; j < integers.length - 1; j++) {
                edges[p][i] = integers[0];
                edges[p][2] = integers[j];
                p++;

            }
        }
    }
}

誰かが私を助けてくれることを願っています。

4

2 に答える 2

2

グラフを別の方法で表現することを検討してください。グラフを表す従来の方法 (および多くの基本的なグラフ アルゴリズムにとって便利な方法) は、Vector[] であり、そのように宣言されたリストの配列です。

Vector<Integer> graph = new Vector<Integer>[number_of_vertices];

graph[i] にアクセスすると、頂点 i の近傍を含むベクトルが返されます。したがって、このデータ構造により、エッジを動的に効率的に追加したり、近隣をすばやくトラバースしたりできます。グラフを作成するサンプル コード:

for (int i = 0; i < k; i++) {
  String line = scanner.nextLine();
  tokens = line.split(" ");
  int from = Integer.parseInt(line[0]);
  for (int j = 1; j < tokens.length; j++) {
    graph[from].add(Integer.parseInt(tokens[j]));
  }
}

編集:汎用配列を使用できない回避策に対するカントの応答を参照してください。

于 2012-04-13T07:03:06.643 に答える
1

私が知っているように、Javaはジェネリック型の配列の使用を許可していません。上記の例をこのように変更するのはどうですか:

Map<Integer,Vector<Integer>> graph = new HashMap<Integer, Vector<Integer>>();

for (int i = 0; i < k; i++) {
  String line = scanner.nextLine();
  tokens = line.split(" ");
  int from = Integer.parseInt(line[0]);
  Vector<Integer> = v new Vector<Integer>();
  for (int j = 1; j < tokens.length; j++) {
    v.add(Integer.parseInt(tokens[j]));
  }
  graph.put(from, v);

}

値を取得したい場合は、次のように記述します。

  Vector<Integer> v = graph.get(0);
于 2012-04-13T10:41:05.127 に答える