1 条题解

  • 0
    @ 2025-4-14 18:43:47

    C :

    #include<stdio.h>
    int main()
    {
    	int n,i,j,ii,iii,go,a[100][100],sum,b[1000],bb[1000],min,minnum;
    	scanf("%d",&n);
    	for(i=1;i<=n;i++)
    		for(j=1;j<=n;j++)
    			scanf("%d",&a[i][j]);
    	b[1]=1;
    	sum=0;
    	for(i=1;i<n;i++)
    	{
    		min=minnum=999999;
    		for(ii=1;ii<=i;ii++)
    			for(j=1;j<=n;j++)
    			{
    				if(j==b[ii])
    					continue;
    				go=1;
    				for(iii=1;iii<=i;iii++)
    				{
    					if(b[iii]==j)
    						go=0;
    				}
    				if(go==0)
    					continue;
    				if(a[b[ii]][j]<min&&a[b[ii]][j]!=0)
    				{
    					min=a[b[ii]][j];
    					minnum=j;
    				}
    			}
    		b[i+1]=minnum;
    		sum+=min;
    	}
    	printf("%d\n",sum);
    	return 0;
    }
    

    C++ :

    #include "stdio.h"
    #include "string.h"
    #include <algorithm>
    using namespace std;
    struct number
    {
      int s,e,w;
    }num[110];
    int set[51];
    bool cmp(number a,number b)
    {
       return a.w<b.w;
    }
     int seeks(int i)
     {
         while(set[i]>0)
    	 {
    	    i=set[i];
    	 }
    	  return i;
     }
    int main(int argc, char* argv[])
    {
    	int n,i,j,sum,v1,v2,a,k;
    	  while(~scanf("%d",&n))
    	  { 
    		  memset(num,0,sizeof(num));
    		  k=1;
    	      for(i=1;i<=n;i++)   
    		  {
    			    for(j=1;j<=n;j++)
    				{
    					scanf("%d",&a);
    					  if(a!=0)
    					  {
    						  num[k].w=a;
    						  num[k].s=i;
    					      num[k++].e=j;
    					  }
    				}
    		  }
               memset(set,0,sizeof(set));
    		    sort(num+1,num+k+1,cmp);
                  i=1;j=1;sum=0;
    			   while(i<k&&j<=n)
    			   { 
    				   v1=seeks(num[i].s);
    			       v2=seeks(num[i].e);
    				    if(v1!=v2)
    					{
    					   set[v1]=v2;
    					    sum+=num[i].w;
    							j++;
    					}
    					 i++;
    			   }
    			    printf("%d\n",sum);
    	  }
    	return 0;
    }
    

    Java :

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		int n = input.nextInt();
    		int[][] weight = new int[n][n];
    		for (int i = 0; i < n; i++) {
    			for (int j = 0; j < n; j++) {
    				weight[i][j] = input.nextInt();
    				if (weight[i][j] == 0)
    					weight[i][j] = Integer.MAX_VALUE;
    			}
    		}
    		minTree mintree = new minTree(n);
    		mintree.prim(weight, 0);
    	}
    
    }
    
    class minTree {
    	int vernum;
    
    	public minTree(int n) {
    		this.vernum = n;
    	}
    
    	public void prim(int[][] weight, int v) {
    		int[] visited = new int[vernum];
    		int sum = 0;
    		int h1 = -1;
    		int h2 = -1;
    		visited[v] = 1;
    		for (int k = 1; k < vernum; k++) {
    			int min = Integer.MAX_VALUE;
    			for (int i = 0; i < vernum; i++) {
    				for (int j = 0; j < vernum; j++) {
    					if (visited[i] == 1 && visited[j] == 0 && weight[i][j] < min) {
    						min = weight[i][j];
    						h1 = i;
    						h2 = j;
    					}
    				}
    			}
    			visited[h2] = 1;
    			sum += min;
    		}
    		System.out.println(sum);
    	}
    }
    
    • 1

    信息

    ID
    3248
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者