1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> #define maxn 110 #define INF 1000000000 int G[maxn][maxn]; int d[maxn], vis[maxn]; int n; long long prim(){ for(int i = 0;i <= n; i++)d[i] = INF, vis[i]=0; d[0]=0; long long ans = 0; for(int i = 0;i < n; i++){ int u = -1, min = INF; for(int j = 0;j < n; j++){ if(vis[j]==0 && d[j] < min){ u = j; min = d[j]; } } vis[u]=1; ans += min; for(int v = 0;v < n; v++){ if(vis[v]==0 && G[u][v] != INF && d[v]>G[u][v]){ d[v] = G[u][v]; } } } return ans; } int main() { while(scanf("%d",&n) != EOF){ for(int i = 0;i < n; i++){ for(int j = 0;j < n; j++){ scanf("%d",&G[i][j]); if(G[i][j]==0)G[i][j]=INF; } } printf("%lld\n",prim()); } return 0; }C++ :
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int dis[101],a[101][101]; int n,tot=0; void work(int); int main() { memset(a,0x7f,sizeof(a)); cin>>n; int x; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>x; a[i][j]=a[j][i]=x; } } work(1); cout<<tot; return 0; } void work(int x) { for(int i=1;i<=n;i++) dis[i]=a[x][i]; dis[x]=0; for(int i=2;i<=n;i++) { int minx=0x7f7f7f7f,k; for(int j=1;j<=n;j++) { if(dis[j]<minx&&dis[j]!=0) { minx=dis[j]; k=j; } } tot+=dis[k]; dis[k]=0; for(int j=1;j<=n;j++) { if(dis[j]>a[k][j]) dis[j]=a[k][j]; } } }
- 1
信息
- ID
- 1466
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者