这个题意是:找连通的最短路程(只要每个点能通即可)
思路:本题的字母是有按顺序的,只要对字母进行排号后将
对应的地图记录下来然后再用prime()算法就能找出最短路径
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }