コスト隣接行列を使用して、PrimおよびKruskalのアルゴリズムの実装をテストしようとしています。私はこれらの行列をグラフの頂点の量とグラフの辺の量で生成しています。それは接続されたグラフである必要はありません。ここでランダム対称ウェイト付き隣接行列を生成する
は、私がこれまで持っているものです。
final static int infinity = 2000000000;
public static int[][] genAdjMat(int V, int E) {
int[][] a = new int[V][V];
int e = E;
for(int i = 0; i < V; i++) {
for(int j = i; j < V; j++) {
if(i == j) {
a[i][j] = 0;
}
else {
if(Math.random() < 0.5 && e >= 0) {
int temp = (int)Math.ceil(Math.random()*e);
a[i][j] = temp;
a[j][i] = temp;
e--;
}
else {
a[i][j] = infinity;
a[j][i] = infinity;
}
}
}
}
return a;
}
今、それは対称配列を生成しますが、それは私が指定したすべてのエッジを使用していません。私はどのようにすべてのエッジを使い切って、対称性を維持しながらマトリックス全体に無作為に配置するかを考え出すのに問題があります。
他の方法で行います。空行列を初期化し、 'E'ランダムエッジを追加します。 –
うわー、私は愚かな気がする。これは私にそれをする別の方法を与えてくれてとてもシンプルです! –