Kruskal 算法:根据加权矩阵显示邻接矩阵

问题描述

我是 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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...