⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prim.cpp

📁 prim算法:可以从任意结点出发,找出与之相连的最小权值的结点,连接,把连接后的结点看成是一个整体,和其他的结点的权值比较,再找出最小权值的结点连接,然后将连接上的结点再看做一个整体,依次类推,直到所
💻 CPP
字号:
#include<stdio.h>
#define infinity 999999999

int main()
{
	long map[101][101],d[101],n,now,next,tot=0;
	bool s[101]={false};int f[101];
	long i,j,k;int t;
        struct
        {int first;
         int end;
         long w;
        }ct[101];
	freopen("prim.in","r",stdin);
	freopen("prim.out","w",stdout);

	scanf("%ld",&n);

	for(i=1;i<=n;i++)
		d[i]=infinity;

	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			scanf("%ld",&map[i][j]);

	now=1;next=1;
	t=0;
	while(next)
	{
		next=0;
		s[now]=true;
		k=infinity;
                t++;
                for(i=1;i<=n;i++)
		{
			if(!s[i]&&d[i]>map[now][i])
			{
				d[i]=map[now][i];
                                f[i]=now;
                        }//if
			if(k>d[i]&&!s[i])
			{
				k=d[i];
				next=i;
                                ct[t].first=f[i];ct[t].end=i;ct[t].w=d[i];
			}//if
		}//for
		now=next;
	}//while

	for(i=2;i<=n;i++)
	{
		tot+=d[i];
	}//for

	printf("%ld\n",tot);
        for (i=1;i<=n-1;i++)
        printf("%d,%d,%ld\n",ct[i].first,ct[i].end,ct[i].w);
	return 0;

}//main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -