| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
注意有重边In Reply To:搞不懂为什么会WA Posted by:plator at 2007-07-06 10:13:42 >
> #include<iostream>
> using namespace std;
> int **Matrix;
> int sum=0;
> int n;
>
> void Prim()
> {
> int max,j,index,i;
> int *N;
> N=new int[n];
> int *c;
> c=new int[n];
> bool *b;
> b=new bool [n]; //1 is tree node,0 is not tree node
> b[0]=1;
> for(i=1;i<n;i++)
> b[i]=0;
> for(i=0;i<n;i++)
> {
> if(Matrix[0][i]!=-1)
> {
> N[i]=0;
> c[i]=Matrix[0][i];
> }
> else
> c[i]=-1;
> }
> for(i=0;i<n-1;i++)
> {
> //search the max edge in array c
> max=-1;
> index=0;
> for(j=1;j<n;j++)
> {
> if(max<c[j] && b[j]==0)
> {
> index=j;
> max=c[j];
> }
> }
> if(c[index]==-1)
> {
> sum=-1;
> return;
> }
> b[index]=1;
> sum=sum+max;
> for(j=0;j<n;j++) //update N and C
> {
> if(Matrix[index][j]!=-1 && b[j]==0)
> {
> if(Matrix[index][j]>c[j])
> {
> N[j]=index;
> c[j]=Matrix[index][j];
> }
> }
> }
> }
> }
> int main()
> {
> int m,x,y,w;
> cin>>n>>m;
> Matrix=new int*[n];
> int i;
> for(i=0;i<n;i++)
> Matrix[i]=new int[n];
> for(x=0;x<n;x++)
> {
> for(y=0;y<n;y++)
> Matrix[x][y]=-1; // 初始化邻接矩阵
> }
> for(i=0;i<m;i++) //输入数据
> {
> cin>>x>>y;
> cin>>Matrix[x-1][y-1];
> Matrix[y-1][x-1]=Matrix[x-1][y-1];
> }
> Prim();
> cout<<sum<<endl;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator