POJ1251题的代码

来源:互联网 发布:皇朝娱乐关注软件 编辑:程序博客网 时间:2024/06/06 00:14

俺是是大飞,本人用Prim算法水过了这题,耗时0MS,新手的看看吧。

#include "iostream"
#include "stdio.h"
using namespace std;
int dis[26][26],flag[26];
int main(int argc, char* argv[])
{
    int V,v,n,m,i,sum,min;
    char c,ch;
    while(scanf("%d",&V)&&V)
    {
        memset(dis,-1,sizeof(dis));
        memset(flag,0,sizeof(flag));
        v=V;
        while(--V)
        {
            cin>>c;
            cin>>n;
            while(n--)
            {
                cin>>ch;
                cin>>i;
                dis[c-'A'][ch-'A']=i;
                dis[ch-'A'][c-'A']=i;
            }
        }//以上所有的数据度已经好了
        sum=0;
        flag[0]=1;//先取第一个点
        for(i=0;i<v-1;i++)
        {
            min=10000000;
            for(m=0;m<v;m++)
            {
                if(flag[m]!=1) continue;
                for(n=0;n<v;n++)
                {
                    if((dis[m][n]==-1)||flag[n]==1) continue;
                    if(dis[m][n]<min)
                    {
                        min=dis[m][n];
                        c=n+'A';
                    }
                }
            }
            flag[c-'A']=1;
            sum=sum+min;
        }
        cout<<sum<<endl;
    }
    return 0;
}

原创粉丝点击