我是 Java 的初学者,我的任务是编写一个实现 Kruskal 算法的 Java 程序。程序应该显示邻接矩阵和最小成本。我已经完成了以下代码。它显示了最低成本,但我不知道如何从加权矩阵输入中显示邻接矩阵。
import java.util.Scanner;
public class kruskal
{
int parent[]=new int[10];
int find(int m)
{
int p=m;
while(parent[p]!=0)
p=parent[p];
return p;
}
void union(int i,int j)
{
if(i<j)
parent[i]=j;
else
parent[j]=i;
}
void krkl(int[][]a, int n)
{
int u=0,v=0,min,k=0,i,j,sum=0;
while(k<n-1)
{
min=99;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]<min&&i!=j)
{
min=a[i][j];
u=i;
v=j;
}
i=find(u);
j=find(v);
if(i!=j)
{
union(i,j);
System.out.println("("+u+","+v+")"+"="+a[u][v]);
sum=sum+a[u][v];
k++;
}
a[u][v]=a[v][u]=99;
}
System.out.println("The cost of minimum spanning tree = "+sum);
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
kruskal k=new kruskal();
char ch;
do
{
int a[][]=new int[10][10];
int i,j;
int n;
System.out.println("Enter the number of vertices of the graph");
n=sc.nextInt();
System.out.println("Enter the weighted matrix");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=sc.nextInt();
System.out.println();
k.krkl(a,n);
System.out.println("\nDo you want to continue? (Type y or n) \n");
ch = sc.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
}
}
有关我将如何执行此操作的任何帮助?我正在尝试输入这样的内容:
1 2 3 4
1 1 0 0 0
2 0 1 1 0
3 0 1 1 0
4 0 0 0 1