poj1251

贪心,初始化flag[]数组时不小心错了,还有就是建图的时候错了;这题乍一看感觉有点像最短路径,不过第一感觉不总是对的,尤其像刚出道的我;

#include<iostream>
#include<queue>
using namespace std;
int map[100][100];
int flag[200];
//queue <int> q;
//bool operator<(int a,int b)
//{
// return b<a;
//}
int main()
{
int n;
char schar,echar;
while(cin>>n&&n!=0)
{
memset(flag,0,sizeof(flag));
int i,j,m,value;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
map[i][j]=1000;
for(i=0;i<n-1;i++)
{
cin>>schar;
cin>>m;
while(m--)
{
cin>>echar>>value;
//cout<<(int)echar<<endl;
map[(int)schar][(int)echar]=value;
map[(int)echar][(int)schar]=value;
}
}
flag[65]=1;
//for(i=66;i<=90;i++)
//{
// if(map[65][i]&&!flag[i])
//q.push(65);
//}
//q.push(65);
int temp=0;
int fnub=0;
int sum=0;
int k;
//for(i=0;i<100;i++)
for(k=1;k<n;k++)
{
int min=1000;
for(i=65;i<91;i++)
{
if(flag[i]==1)
for(j=65;j<91;j++)
{
if(flag[j]==0&&map[i][j]!=1000&&map[i][j]<min)
{
min=map[i][j];
temp=j;
}
}
}
//cout<<"min:"<<min<<endl;
//cout<<"temp:"<<temp<<endl;
sum+=min;
flag[temp]=1;


}
cout<<sum<<endl;
}
return 0;
}

 

posted @ 2012-04-06 10:46  orangeblog  阅读(526)  评论(1编辑  收藏  举报