POJ1258 Agri-Net

本文详细介绍了使用Prim算法求解最小生成树的问题,并通过具体代码实现了该算法。文章记录了作者在实现过程中遇到的错误及解决方法,如多次错误答案(WA)和超时(TLE)的问题,同时分享了如何正确处理多组输入数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

考查点:最小生成树
提交情况:1次TLE 2次WA
收获:当有多组数据而题目中没有说什么情况下退出时,用while(scanf()!=EOF)判断,否则TLE~
AC_CODE:
  1. #include <stdio.h>
  2. bool visited[101];
  3. int lowcost[101],mincost,roads[101][101],min;
  4. int prim(int n)
  5. {
  6.     int min_v;
  7.     visited[0]=true;
  8.     mincost=0;//开始忘了,导致2次WA~粗心呐~
  9.     for(int i=0;i<n;i++)
  10.         lowcost[i]=roads[0][i];
  11.     for(int i=1;i<n;i++)
  12.     {
  13.         min=1000000;
  14.         for(int j=0;j<n;j++)
  15.             if(visited[j]==false&&lowcost[j]<min)
  16.             {
  17.                 min=lowcost[j];
  18.                 min_v=j;
  19.             }
  20.         visited[min_v]=true;
  21.         mincost+=min;
  22.         for(int j=0;j<n;j++)
  23.             if(visited[j]==false&&roads[min_v][j]<lowcost[j])
  24.                 lowcost[j]=roads[min_v][j];
  25.     }
  26.     return mincost;
  27. }
  28. int main()
  29. {
  30.     int n;
  31.     while (scanf("%d",&n)!=EOF)
  32.     {
  33.         if(n==0) break;
  34.         for(int i=0;i<n;i++)
  35.             visited[i]=false;
  36.         for(int i=0;i<n;i++)
  37.             for(int j=0;j<n;j++)
  38.                 scanf("%d",&roads[i][j]);
  39.         printf("%d/n",prim(n));
  40.     }
  41.     return 0;
  42. }

POJ 3213 题目是一个关于矩阵乘法的经典计算机科学问题。矩阵乘法通常是线性代数的基础操作,给定两个矩阵 A 和 B,你需要计算它们的乘积 C = A * B,其中每个元素 C[i][j] 是对应位置上 A 的行向量与 B 的列向量的点积。 以下是一个简单的 Java 代码示例,使用嵌套循环来实现矩阵乘法: ```java import java.util.Scanner; public class MatrixMultiplication { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入矩阵的维度 System.out.println("Enter the dimensions of matrix A (m x n):"); int m = scanner.nextInt(); int n = scanner.nextInt(); // 创建矩阵 A 和 B int[][] matrixA = new int[m][n]; int[][] matrixB = new int[n][n]; // 读取矩阵 A 的元素 System.out.println("Enter elements of matrix A:"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { matrixA[i][j] = scanner.nextInt(); } } // 读取矩阵 B 的元素(假设输入的矩阵都是方阵,大小为 n x n) System.out.println("Enter elements of matrix B:"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrixB[i][j] = scanner.nextInt(); } } // 矩阵乘法 int[][] result = new int[m][n]; // 结果矩阵 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { // 每次循环k用于遍历B的列 result[i][j] += matrixA[i][k] * matrixB[k][j]; } } } // 输出结果矩阵 System.out.println("Matrix multiplication result:"); for (int[] row : result) { for (int element : row) { System.out.print(element + " "); } System.out.println(); } scanner.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值