主题:帮忙看看我的代码,错在那些地方了
用prim算法实习最小生成树;
题目:http://acm.tju.edu.cn/toj/showp.php?pid=1924
代码如下:
#include<iostream>
using namespace std;
int Prim(int money[27][27], int n)
{
/* lowcost[i]记录以i为终点的边的最小权值,当lowcost[i]=0时表示终点i加入生成树 */
int lowcost[27];
/* mst[i]记录对应lowcost[i]的起点,当mst[i]=0时表示起点i加入生成树 */
int mst[27];
int i, j, min, minid, sum = 0;
for (i = 1; i <= n; i++)
{
lowcost[i] = money[0][i];
mst[i] = 1;
}
mst[1] = 0;
for (i = 1; i <= n; i++)
{
min = 101;
minid = 0;
for (j = 1; j <= n; j++)
{
if (lowcost[j] < min && lowcost[j] != 0)
{
min = lowcost[j];
minid = j;
}
}
//printf("%c - %c : %d\n", mst[minid] + 'A' - 1, minid + 'A' - 1, min);
sum += min;
lowcost[minid] = 0;
for (j = 1; j <= n; j++)
{
if (money[minid][j] < lowcost[j])
{
lowcost[j] = money[minid][j];
mst[j] = minid;
}
}
}
return sum;
}
int main()
{
int n,m,i,j,k;
int money[27][27];
char a,b;
while(1)
{
cin>>n;
if(n==0) break;
for(i=1;j<=n;j++)
for(j=1;j<=n;j++)
{
money[i][j]=101;
}
for(i=1;i<=n-1;i++)
{
cin>>a>>m;
for(j=1;j<=m;j++)
cin>>b>>k;
money[a-'A'+1][b-'A'+1]=money[b-'A'+1][a-'A'+1]=k;
}
cout<<Prim(money,n)<<endl;
}
}
我觉得思路应给是对了,可怎么也同不过,哪位高人帮忙看看呢
题目:http://acm.tju.edu.cn/toj/showp.php?pid=1924
代码如下:
#include<iostream>
using namespace std;
int Prim(int money[27][27], int n)
{
/* lowcost[i]记录以i为终点的边的最小权值,当lowcost[i]=0时表示终点i加入生成树 */
int lowcost[27];
/* mst[i]记录对应lowcost[i]的起点,当mst[i]=0时表示起点i加入生成树 */
int mst[27];
int i, j, min, minid, sum = 0;
for (i = 1; i <= n; i++)
{
lowcost[i] = money[0][i];
mst[i] = 1;
}
mst[1] = 0;
for (i = 1; i <= n; i++)
{
min = 101;
minid = 0;
for (j = 1; j <= n; j++)
{
if (lowcost[j] < min && lowcost[j] != 0)
{
min = lowcost[j];
minid = j;
}
}
//printf("%c - %c : %d\n", mst[minid] + 'A' - 1, minid + 'A' - 1, min);
sum += min;
lowcost[minid] = 0;
for (j = 1; j <= n; j++)
{
if (money[minid][j] < lowcost[j])
{
lowcost[j] = money[minid][j];
mst[j] = minid;
}
}
}
return sum;
}
int main()
{
int n,m,i,j,k;
int money[27][27];
char a,b;
while(1)
{
cin>>n;
if(n==0) break;
for(i=1;j<=n;j++)
for(j=1;j<=n;j++)
{
money[i][j]=101;
}
for(i=1;i<=n-1;i++)
{
cin>>a>>m;
for(j=1;j<=m;j++)
cin>>b>>k;
money[a-'A'+1][b-'A'+1]=money[b-'A'+1][a-'A'+1]=k;
}
cout<<Prim(money,n)<<endl;
}
}
我觉得思路应给是对了,可怎么也同不过,哪位高人帮忙看看呢