hdu 1879 继续畅通工程

多实例测试,num没有初始化,Runtime Error(ACCESS_VIOLATION)   N次

#include<stdio.h>
#include<stdlib.h>
struct bian
{
	int x,y,w;
}b[5010];
int ji[110];
int n,m,num=0,l;
int cmp(const void *a,const void *b)
{
	struct bian *c=(struct bian *)a,*d=(struct bian *)b;
	return c->w-d->w;
}
int root(int i)
{
	while(ji[i]!=i)
		i=ji[i];
	return i;
}
int kruskal()
{
	int i=0,xx,yy,max=0;
	while(l!=n)
	{
		xx=root(b[i].x);
		yy=root(b[i].y);
		while(xx==yy)
		{
			i++;
			xx=root(b[i].x);
			yy=root(b[i].y);
		}
		max+=b[i].w;
		if(xx<yy)
			ji[yy]=xx;
		else ji[xx]=yy;
		l++;
	}
	return max;
}
int main()
{
	int i,x,y,w,bd,xx,yy;
	while(scanf("%d",&n),n)
	{
		m=n*(n-1)/2;
		l=1;
		num=0;
		for(i=1;i<=n;i++)
			ji[i]=i;
		for(i=1;i<=m;i++)
		{
			scanf("%d%d%d%d",&x,&y,&w,&bd);
			if(bd)
			{
				l++;
				xx=root(x);
				yy=root(y);
				if(yy>xx)
					ji[yy]=xx;
				else ji[xx]=yy;
			}
			else
			{
				b[num].x=x;
				b[num].y=y;
				b[num++].w=w;
			}
		}
		qsort(b,num,sizeof(b[0]),cmp);
		printf("%d\n",kruskal());
	}
	return 0;
}


 

#include<stdio.h>
#include<string.h>
int n,m;
int map[110][110],vis[110],dist[110];
int zhao()
{
	int i,xia=-1;
	for(i=1;i<=n;i++)
		if(vis[i]==0&&(xia==-1||dist[i]<dist[xia]))
			xia=i;
	return xia;
}
void geng(int j)
{
	int i;
	for(i=1;i<=n;i++)
		if(vis[i]==1&&map[i][j]<dist[j])
			dist[j]=map[i][j];
}
int prim()
{
	int i,j,xia,max=0,l=1;
	memset(vis,0,sizeof(vis));
	vis[1]=1;
	for(i=1;i<=n;i++)
		dist[i]=map[1][i];
	while(l!=n)
	{
		xia=zhao();
		vis[xia]=1;
		max+=dist[xia];
		for(j=1;j<=n;j++)
			if(vis[j]==0)
				geng(j);
		l++;
	}
	return max;
}
int main()
{
	int i,x,y,w,b;
	while(scanf("%d",&n),n)
	{
		m=n*(n-1)/2;
		for(i=1;i<=m;i++)
		{
			scanf("%d%d%d%d",&x,&y,&w,&b);
			if(b)
				map[x][y]=map[y][x]=0;
			else map[x][y]=map[y][x]=w;
			map[x][x]=0;
		}
		printf("%d\n",prim());
	}
	return 0;
}


 

你可能感兴趣的:(hdu 1879 继续畅通工程)