这个题意是:找连通的最短路程(只要每个点能通即可)

思路:本题的字母是有按顺序的,只要对字母进行排号后将

对应的地图记录下来然后再用prime()算法就能找出最短路径

代码:

代码
 1 #include<iostream>
 2 #define MAX 0x4f4f4f4f
 3 using namespace std;
 4 int map[29][29],dis[29],mark[29];
 5 int temp,n;
 6 int prime()
 7 {
 8     int i,j,min,v;
 9     temp=0;
10     for(i=1;i<=n;i++)
11     {
12         dis[i]=map[1][i];
13         mark[i]=0;
14     }
15     mark[1]=1;
16     for(i=1;i<n;i++)
17     {
18         min=MAX;
19          for(j=1;j<=n;j++)
20          {
21              if(dis[j]<min&&!mark[j])
22              {
23                  min=dis[j];
24                  v=j;
25              }
26          }
27          mark[v]=1;
28          temp+=min;
29          for(j=1;j<=n;j++)
30          {
31              if(map[v][j]<dis[j])
32                  dis[j]=map[v][j];
33          }
34     }
35     return 1;
36 } 
37 int main()
38 {
39     char pl,plo;
40     int b,i,j,x;
41     while(cin>>n&&n)
42     {
43         memset(map,MAX,sizeof(map));
44         for(j=1;j<=n-1;j++)
45         {
46             cin>>pl>>b;
47             for(i=0;i<b;i++)
48             {
49                 cin>>plo>>x;
50                 map[pl-64][plo-64]=map[plo-64][pl-64]=x;//将字符排号后把对应的地图记录 
51             }
52         }
53         prime();
54         cout<<temp<<endl;
55             }    
56 } 

 

posted on 2012-09-14 20:51  xinmenghuairi  阅读(175)  评论(0编辑  收藏  举报