研究了几天最短路径,果然对图论还是很难有兴趣啊!第一次写迪杰斯特拉算法,写的超级烂,有空改改再优化下,好好想清楚细节方面……下面贴出代码以作纪念。
View Code
1 /*{ 2 ID:jzy3209981 3 PROG:comehome 4 LANG:C++ 5 }*/ 6 #include<stdio.h> 7 #include<iostream> 8 #include<string.h> 9 #include<math.h> 10 using namespace std; 11 12 int shortest[60]; 13 int distances[5000][2]; 14 int gragh[60][60]; 15 int visit[60]; 16 int visitt[60][60]; 17 void dstr() 18 { 19 int po=0,j=0,i,shortpoint,p,minn,nowpoint,changep,nowdis=0; 20 visit['Z'-65]=1; 21 nowpoint='Z'-65; 22 int change[2]; 23 while(po<=j) 24 { 25 minn=100000; 26 for(i=0;i<58;i++) 27 if(gragh[nowpoint][i]!=0&&visitt[nowpoint][i]!=1) 28 { 29 distances[j][0]=gragh[nowpoint][i]+nowdis; 30 distances[j][1]=i; 31 visitt[nowpoint][i]=1; 32 j++; 33 } 34 for(p=po;p<j;p++) 35 if(distances[p][0]<minn&&visit[distances[p][1]]!=1) 36 { 37 minn=distances[p][0]; 38 shortpoint=distances[p][1]; 39 changep=p; 40 } 41 nowdis=distances[changep][0]; 42 nowpoint=shortpoint; 43 change[0]=distances[changep][0]; 44 change[1]=distances[changep][1]; 45 distances[changep][0]=distances[po][0]; 46 distances[changep][1]=distances[po][1]; 47 distances[po][0]=change[0]; 48 distances[po][1]=change[1]; 49 po++; 50 visit[nowpoint]=1; 51 shortest[nowpoint]=minn; 52 } 53 } 54 int main() 55 { 56 freopen ("comehome.in","r",stdin); 57 freopen ("comehome.out","w",stdout); 58 int p,i,dis,po; 59 char start[2],end[2]; 60 int minn=10000000; 61 scanf("%d",&p); 62 for(i=0;i<p;i++) 63 { 64 scanf("%s%s%d",start,end,&dis); 65 if((gragh[start[0]-65][end[0]-65]!=0&&gragh[start[0]-65][end[0]-65]>dis)||gragh[start[0]-65][end[0]-65]==0) 66 { 67 gragh[start[0]-65][end[0]-65]=dis; 68 gragh[end[0]-65][start[0]-65]=dis; 69 } 70 71 } 72 dstr(); 73 for(i=0;i<25;i++) 74 if(shortest[i]<minn&&shortest[i]!=0) 75 { 76 minn=shortest[i]; 77 po=i; 78 } 79 printf("%c %d\n",po+65,minn); 80 return 0; 81 }

浙公网安备 33010602011771号