prime

#include<iostream>

using namespace std;

#define MAX 101
#define INF 99999999

struct stuNodes
{
int nFrom;
int nCost;
int nTo;
};

void vInput(int nArry[][MAX],int nN);
int nGetMin(int nArry[][MAX],int nN);
stuNodes nFindMinCost(bool bF[],bool bT[],int nArry[][MAX],int nN);
void vOut(int nRet);

int main()
{
int nNUM;
int nNodes[MAX][MAX];
int nAns;

while(1==scanf("%d",&nNUM))
{
vInput(nNodes,nNUM);
nAns=nGetMin(nNodes,nNUM);
vOut(nAns);
}
return 0;
}

void vInput(int nArry[][MAX],int nN)
{
int i;
int j;

for(i=1;i<=nN;i++)
{
for(j=1;j<=nN;j++)
{
scanf("%d",&nArry[i][j]);
}
}
}

int nGetMin(int nArry[][MAX],int nN)
{
int nAns;
int i;
bool bFrom[MAX],bTo[MAX];
stuNodes stuMin;
int nCount;

for(i=1;i<=nN;i++)
{
bFrom[i]=false;
bTo[i]=true;
}
nCount=1;
bFrom[nCount]=true;
bTo[nCount]=false;

nAns=0;
while(nCount<nN)
{

stuMin=nFindMinCost(bFrom,bTo,nArry,nN);
bFrom[stuMin.nTo]=true;
bTo[stuMin.nTo]=false;
nAns+=stuMin.nCost;
nCount++;
}

return nAns;
}
stuNodes nFindMinCost(bool bF[],bool bT[],int nArry[][MAX],int nN)
{
stuNodes nRet;
int i;
int j;
int nF,nT;
int nTemp;

nTemp=INF;
nF=1;
nT=1;

for(i=1;i<=nN;i++)
{
if(bF[i])
{
for(j=1;j<=nN;j++)
{
if(bT[j])
{
if(nTemp>nArry[i][j])
{
nTemp=nArry[i][j];
nF=i;
nT=j;

}
}
}
}
}
nRet.nCost=nTemp;
nRet.nFrom=nF;
nRet.nTo=nT;
return nRet;
}

void vOut(int nRet)
{
printf("%d\n",nRet);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值