研究了几天最短路径,果然对图论还是很难有兴趣啊!第一次写迪杰斯特拉算法,写的超级烂,有空改改再优化下,好好想清楚细节方面……下面贴出代码以作纪念。

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 }

 

posted on 2012-08-03 10:36  醉春雨  阅读(195)  评论(0)    收藏  举报