ZBLOG

#include using namespace std; const int N = 100010; typedef struct { int u, v, w; }edge; edge e[N]; int p[N]; vector ans[N]; bool vis[N]; int n, m; int cnt, res; int find(int x) { if(p[x] != x) p[x] = find(p[x]); ...

将上述代码转换为Java语言如下:

import java.util.*;

class Main {
    static class Edge implements Comparable<Edge> {
        int u, v, w;

        public Edge(int u, int v, int w) {
            this.u = u;
            this.v = v;
            this.w = w;
        }

        @Override
        public int compareTo(Edge other) {
            return Integer.compare(this.w, other.w);
        }
    }

    static List<Integer>[] ans;
    static boolean[] vis;
    static int[] p;
    static Edge[] e;
    static int n, m;
    static int cnt, res;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        m = scanner.nextInt();
        
        e = new Edge[m];
        p = new int[n+1];
        
        for (int i = 0; i < m; i++) {
            int u = scanner.nextInt();
            int v = scanner.nextInt();
            int w = scanner.nextInt();
            
            e[i] = new Edge(u, v, w);
        }
        
        kruskal();
        
        scanner.close();
    }

    public static void kruskal() {
        Arrays.sort(e);

    	for(int i=1;i<=n;i++)
			p[i]=i;

		ans=new ArrayList[n+1];
		for(int i=0;i<=n;i++)
			ans[i]=new ArrayList<Integer>();

		for(int i=0;i<m;i++){
			int u=e[i].u,v=e[i].v,w=e[i].w;
			u=find(u);v=find(v);

			if(u!=v){
				p[u]=v;
				res+=w;cnt++;
			}
			
			if(cnt==n-1)
			    break;
		}

		if(cnt!=n-1){
			int pos=0;
			System.out.println("NO!");
			for(int i=1;i<=n;i++){
				if(find(i)==i) vis[i]=true;
				ans[p[i]].add(i);
			}
			
			for(int i=1;i<=n;i++){
				if(vis[i]){
					System.out.print(++pos + " part: ");
					
					for(int j=0;j<ans[i].size();j++){
						if(j != ans[i].size() - 1)
						    System.out.print(ans[i].get(j) + " ");
						else
						    System.out.println(ans[i].get(j));
					}
				}
			}
		} else {
		    System.out.println("YES!");
		    System.out.println("Total cost: " + res);
        }
    }

    public static int find(int x) {
        if (p[x] != x)
            p[x] = find(p[x]);
        return p[x];
    }
}

这是将C++代码转换为Java的一个简单示例,但请注意在转换过程中可能需要处理一些特定的语法差异和标准库函数的替代。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15231

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?