关于地震建立通信网(即最短路径)的问题

对于最短路径的问题,即是最小生成树的问题;建立要在n个城市之间建立通信连接网络,则联通n个城市需要n-1条路线,那么如何在节省经费的情况下建立一个通信网络。

prime算法就是构造最小生成树的算法。

(通过这次总结,希望自己对于prime算法有更深层次的了解)

#include<stdio.h>
int p[1001][1001];
int main()
{    int i,j,k,n;
    int T=0,min,lowcost[1001]; 
	 while(scanf("%d",&n)&&n!=0)
	 {
		 for(i=1;i<=n;i++)
		    for(j=1;j<=n;j++)
			{
				scanf("%d",&p[i][j]);
				if(p[i][j]==-1) 	p[i][j]=9999;
			}
			k=1;
			for(j=2;j<=n;j++)
				lowcost[j]=p[k][j];
			    T=lowcost[k]=0;
                       for(i=1;i<=n-1;i++)
			{
				   min=9999;
                                   for(j=2;j<=n;j++)
		    			if(lowcost[j]!=0&&lowcost[j]<min)
					{
						k=j;
						min=lowcost[k];
					}
					T+=min;
				lowcost[k]=0;
				for(j=2;j<=n;j++)
					if(lowcost[j]!=0&&p[k][j]<lowcost[j])
                       lowcost[j]=p[k][j];
				}
			printf("%d\n",T);
			}
				return 0;
}


输入输出样例:

标准输入:

  第一行:n     (n为城市数目)

  第2—n+1行:p[i][1]……p[i][n]   (pij为建立地点i和地点j直接连通的代价,i,j=1,2……n)

标准输出:T  (建立通信网的最小代价数)

例如:(如下 280 是输出结果):


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值