zoukankan      html  css  js  c++  java
  • poj 1251Jungle Roads (最小生成树:prime+krusual)

    点击打开链接

    krusual:

    #include"stdio.h"
    #include"stdlib.h"
    int set[101];
    struct node
    {
    	int a,b,dis;
    }aa[101];
    int find(int x)
    {
    	int r,i;
    	r=x;
    	while(set[r]!=r)
    		r=set[r];
    	while(set[x]!=r)
    	{
    		i=set[r];
    		set[x]=r;
    		r=i;
    	}
    	return r;
    }
    int cmp(const void*a,const void*b)
    {
    	struct node *c,*d;
    	c=(struct node*)a;
    	d=(struct node*)b;
    	return c->dis-d->dis;
    }
    int main()
    {
    	int n,i,j,k,ans,cnt;
    	int x,y,t,tt,ttt;
    	char c,cc,str[100];
    	while(scanf("%d",&n)!=EOF&&n)
    	{
    		for(i=0;i<=100;i++)
    			set[i]=i;
    		k=0;
    		for(i=0;i<n-1;i++)
    		{	
    			scanf(" %c %d",&c,&t);
    			for(j=0;j<t;j++)
    			{
    				scanf(" %c %d",&cc,&tt);
    				aa[k].a=c-'A';
    				aa[k].b=cc-'A';
    				aa[k++].dis=tt;
    			}
    		}
    		qsort(aa,k,sizeof(aa[0]),cmp);
    		ans=0;cnt=0;
    		for(i=0;i<k;i++)
    		{
    			x=find(aa[i].a);
    			y=find(aa[i].b);
    			if(x!=y)
    			{
    				ans+=aa[i].dis;
    				set[x]=y;
    				if(++cnt==n-1)break;
    			}
    		}
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    prime

    #include"stdio.h"
    #include"string.h"
    #define INF 9999999
    int map[30][30],mark[30],f[30];
    int n;
    void prime()
    {
    	int i,j,k,min,ans;
    	memset(mark,0,sizeof(mark));
    	for(i=0;i<n;i++)
    		f[i]=map[0][i];
    	f[0]=0;mark[0]=1;
    	ans=0;
    	/*prime算法只与边的个数有关,因为n个点有n-1个边,
    	所以,循环进行n-1次,否则就会把定义的INF也加入最小生成树*/
    	for(i=0;i<n-1;i++)
    	{
    		min=INF;
    		for(j=0;j<n;j++)
    		{
    			if(!mark[j]&&f[j]<min)
    			{
    				min=f[j];k=j;
    			}
    		}
    		ans=ans+min;
    		mark[k]=1;
    		for(j=0;j<n;j++)
    		{
    			if(!mark[j]&&f[j]>map[k][j])
    				f[j]=map[k][j];
    		}
    	}
    	printf("%d\n",ans);
    }
    int main()
    {
    	int i,j,t,tt;
    	char c,cc;
    	while(scanf("%d",&n)!=-1&&n)
    	{
    		memset(map,76,sizeof(map));
    		for(i=0;i<n-1;i++)
    		{
    			scanf(" %c %d",&c,&t);
    			for(j=0;j<t;j++)
    			{
    				scanf(" %c %d",&cc,&tt);
    				map[c-'A'][cc-'A']=map[cc-'A'][c-'A']=tt;
    			}
    		}
    		prime();
    	}
    	return 0;
    }
    
    

  • 相关阅读:
    Java 源码刨析
    qemu-guest-agent详解
    Java 源码刨析
    NTP服务解析
    virsh常见命令笔记
    Ansible之playbook
    ansible模块详解
    HashMap详解
    Mysql-Incorrect string value
    web开发中前后端传值
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365311.html
Copyright © 2011-2022 走看看