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 |
dijkstra算法oms哦给位!#include <iostream> using namespace std; #include <string.h> #include <stdio.h> const int size = 110; #define maxint 99999 class poj1502 { private: int map[size][size]; int dist[size]; bool flag[size]; public: int n; void input(); void output(); void dijkstra(); }; int translate(char str[]) { int sum=0,k,len; if(str[0]=='x') return -1; else { len=strlen(str); for(k=0;k<len;k++) sum=sum*10+(str[k]-'0'); } return sum; } void poj1502::input() { memset(map,0,sizeof(map)); char w[20]; int weight; for(int i=2;i<=n;i++) { for(int j=1;j<i;j++) { scanf("%s",w); weight=translate(w); if(weight==-1) { map[i][j]=maxint; map[j][i]=map[i][j]; } else { map[i][j]=weight; map[j][i]=map[i][j]; } } } } void poj1502::output() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<map[i][j]; } cout<<endl; } } void poj1502::dijkstra() { int k; for(k=1;k<=n;k++) dist[k]=map[1][k]; // output(); memset(flag,false,sizeof(flag)); flag[1]=true; int min=0; for(int i=1;i<n;i++) { int tmp=maxint; for(int j=1;j<=n;j++) if(!flag[j]&&dist[j]<tmp) { tmp=dist[j]; k=j; } flag[k]=true; if(dist[k]>min) min=dist[k]; for(int j=1;j<=n;j++) if(!flag[j]&&(dist[k]+map[k][j])<dist[j]) dist[j]=dist[k]+map[k][j]; } cout<<min<<endl; } int main() { poj1502 t; while(scanf("%d",&t.n)!=EOF) { t.input(); t.dijkstra(); } return 1; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator