hdu 1301 prime Jungle Roads

題目  http://acm.hdu.edu.cn/showproblem.php?pid=1301

我在這個題目中犯了二個錯誤哦,很糾結這個題目有不難  下次一定注意   第一個錯誤是輸入有錯誤  搞的我一直錯了,

第二個是   A 到B跟B到A點距離是相同的。

下面看具體ac代碼

#include<iostream>
#include<cstring>
#include<cstdio>
#include<iomanip>
using namespace std;
#define inf 999999

int map[101][101];  ///圖
bool mark[101];
int dis[101];
int n;

void prime()
{
    memset(mark,false,sizeof(mark)); ///標記
    memset(dis,0,sizeof(dis));   ///距離
    int sum,k,i,j,min;

    sum=0;
    for(i=1;i<=n;i++)
    {
        dis[i]=map[1][i];
    }
    dis[1]=0;
    mark[1]=true;

    for(i=2;i<=n;i++)
    {
        min=inf;
        k=0;
        for(j=1;j<=n;j++)   ///找出最短的距離
        {
            if(!mark[j]&&min>dis[j])
            {
                min=dis[j];
                k=j;
            }
        }
        sum+=min;

        mark[k]=true; ///標記

        for(j=1;j<=n;j++)  ///更新
        {
            if(map[k][j]&&!mark[j]&&dis[j]>map[k][j])
            {
                dis[j]=map[k][j];
            }
        }
    }
   cout<<sum<<endl;
}

int main()
{
    int i,j,k,t,m1,m2;
    char a,b;
    while(scanf("%d",&n)!=EOF,n)
    {
        memset(map,inf,sizeof(map)); ///初始化

       for(i=1;i<n;i++)
       {
           cin>>a>>k;  ///k代表這個點跟幾個點相連哦
           for(j=0;j<k;j++)
           {
               cin>>b>>t;
               m1=a-'A'+1;  ///注意我是從1開始的所以要加1 。。
               m2=b-'A'+1;
              /// cout<<"m1  "<<m1<<"  m2  "<<m2<<endl;
               map[m2][m1]=map[m1][m2]=t; ///這裏一定要注意哦。。。
           }
       }
       prime();
    }
    return 0;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章