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

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

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

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

0回答

1296閲覧

プリム法を使って最小全域木を描画をしたいです

hmghmh

総合スコア0

Java

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2020/08/05 03:09

前提・実現したいこと

最小全域木を描画したいです

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Java
ソースコード
// 点のx座標とy座標を記憶する配列
int[] ax = new int[]{100, 200, 300, 400, 100, 200, 300, 400, 100, 200, 300, 400, 100, 200, 300, 400}; // 点の x 座標を記憶する配列
int[] ay = new int[]{100, 100, 100, 100, 200, 200, 200, 200, 300, 300, 300, 300, 400, 400, 400, 400};// 点の y 座標を記憶する配列

int[][] NW = new int[16][16]; // 枝のコストを保存する配列(0は繋がっていない枝を表す)
int[] S = new int[16]; // 最初に選んだ点と同じ部分集合に 1:含まれる、0:含まない を表す配列
int[][] Tree = new int[16][2]; // どの点と点を繋ぐかを記憶する配列

void setup() {
size(500, 500);
background(255);

decide_weight(); // 枝のコストを決める
draw_line(); // グラフの枝を描く
draw_ellipse(); // グラフの円を描く
draw_text(); // 円の番号を書く
draw_weight(); // 枝のコストを書く

Prim(); // 最小全域木を求める
draw_tree(); // 最小全域木を描く

}

// 枝を描く関数
void draw_line(){
int i,j;
strokeWeight(10);
for( i=0; i<16; i++ ){
for( j=0; j<16; j++ ){
if( NW[i][j] != 0 ){
line(ax[i], ay[i], ax[j], ay[j] );
}
}
}
}

// 点(円)を描く関数
void draw_ellipse(){
int i;
strokeWeight(2);
for( i=0; i<16; i++ ){
ellipse( ax[i], ay[i], 50, 50 );
}
}

// 点番号を書く関数
void draw_text(){
int i;
String s;
PFont myFont = loadFont("Arial-Black-18.vlw");
textFont(myFont);
textAlign(CENTER, CENTER);

fill(0);
for( i=0; i<16; i++ ){
s = ""+i;
text(s, ax[i], ay[i]);
}
}

// エッジの重みを書く関数
void draw_weight(){

int i, j;
String s;
PFont myFont = loadFont("Arial-Black-24.vlw");
textFont(myFont);
textAlign(CENTER, CENTER);

fill(255,125,125);
for( i=0; i<16; i++ ){
for( j=0; j<16; j++ ){
if( NW[i][j] > 0 ){
s = ""+NW[i][j];
text(s, (ax[i]+ax[j])/2, (ay[i]+ay[j])/2 );
}
}
}
}

// 枝のコストを決定する関数
void decide_weight(){
int i,j;

// randomSeed(0) の0の部分は,各自の学籍番号の下1桁にします。
// この数値を変えると生成される乱数が変わります。
randomSeed(0);

for( i=0; i<16; i++ ){
for( j=0; j<16; j++ ){
NW[i][j] = 0;
}
}

// 横方向の枝
NW[0][1] = NW[1][0] = (int)random(1, 30);
NW[1][2] = NW[2][1] = (int)random(1, 30);
NW[2][3] = NW[3][2] = (int)random(1, 30);
NW[4][5] = NW[5][4] = (int)random(1, 30);
NW[5][6] = NW[6][5] = (int)random(1, 30);
NW[6][7] = NW[7][6] = (int)random(1, 30);
NW[8][9] = NW[9][8] = (int)random(1, 30);
NW[9][10] = NW[10][9] = (int)random(1, 30);
NW[10][11] = NW[11][10] = (int)random(1, 30);
NW[12][13] = NW[13][12] = (int)random(1, 30);
NW[13][14] = NW[14][13] = (int)random(1, 30);
NW[14][15] = NW[15][14] = (int)random(1, 30);

// 縦方向の枝
NW[0][4] = NW[4][0] = (int)random(1, 30);
NW[4][8] = NW[8][4] = (int)random(1, 30);
NW[8][12] = NW[12][8] = (int)random(1, 30);
NW[1][5] = NW[5][1] = (int)random(1, 30);
NW[5][9] = NW[9][5] = (int)random(1, 30);
NW[9][13] = NW[13][9] = (int)random(1, 30);
NW[2][6] = NW[6][2] = (int)random(1, 30);
NW[6][10] = NW[10][6] = (int)random(1, 30);
NW[10][14] = NW[14][10] = (int)random(1, 30);
NW[3][7] = NW[7][3] = (int)random(1, 30);
NW[7][11] = NW[11][7] = (int)random(1, 30);
NW[11][15] = NW[15][11] = (int)random(1, 30);
}

// 最小全域木を求める関数
void Prim(){
int i,j,x=0,min=100,index=0,z=0;
S[0]=1;
while(z<15){
for(i=0;i<16;i++){
if(S[i]==1)
for(j=0;j<16;j++){
NW[i][j]=x;
if(min>x){
min=x;
index=i;
}
}
}
S[index]=1;

}

}

// 結果を描く関数
void draw_tree(){

}

試したこと

最小全域木を求める関数を打ち込んでみたが上手くいきませんでした

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

quickquip

2020/08/05 06:27

質問が書いてありません。 「上手くいきませんでした」ではどうなったのか伝わりません。 draw_tree の実装が書いてありません。 質問を編集して、コードが読めるように<code>ボタンを使う または 前後行を```で括るかしてください。 https://teratail.com/help/question-tips#questionTips3-5-1https://teratail.com/help#about-markdown を参考に 前者のページは一読するとよいかと思います。(全部読んでから質問する方が結果として解決は早くなるかと)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問