Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我的WA代码,大虾们有空了进来分析分析:/*我的WA代码:结点从1开始计,maxn为最大结点数, n为结点数,manint是无穷大, c[i][j] i到j的权,pre[]记录父结点,dist[i]源点到i的最短路径,s[]表示左边的集合*/ #include <iostream> #include <stdio.h> using namespace std; const int maxn = 102; int manint = 99999999; double c[maxn][maxn],dist[maxn]; int prev[maxn],n; double ans; void dijkstra(int v)//原点是v { bool s[maxn]; register int i,j; for(i=1;i<=n;i++) { dist[i] = c[v][i]; s[i] = 0; if(dist[i]==manint)//v to i没有边 prev[i] = 0; else prev[i] = v; } s[v] = 1; dist[v] = 0; for(i=1;i<n;i++) { double temp = manint; int u = v; for(j=1;j<=n;j++) if(!s[j]&&dist[j]>=0&&dist[j]<temp) { u = j; temp = dist[j]; } s[u] = 1; for(j=1;j<=n;j++) if(!s[j]&&c[u][j]<manint) { double newdist = dist[u] + c[u][j]; if(newdist < dist[j]) { dist[j] = newdist; prev[j] = u; } } } } int main() { register int i,j; int edges; int a,b; double percent; while(cin>>n&&n) { for(i=0;i<=n;i++) for(j=0;j<=n;j++) c[i][j]=manint; cin>>edges; for(i=1;i<=edges;i++) { cin>>a>>b>>percent; c[a][b]=c[b][a]=1-percent/100; } dijkstra(1); ans=1.0; int k=n; while(k!=1) { ans*=(1-c[k][prev[k]]); k=prev[k]; } printf("%.6lf percent\n",ans*100); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator