uva10000 Longest Paths
最长路径,和最短路径差不多,用了spfa来求
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #define N 1000 using namespace std; int g[N][N]; int dis[N]; int vis[N]; void spfa(int n,int s){ queue<int>que; while(!que.empty()){ que.pop(); } que.push(s); while(!que.empty()){ int d=que.front(); que.pop(); vis[d]=0; for(int i=1;i<=n;i++){ if(g[d][i]>0 && dis[i]<dis[d]+g[d][i]){ dis[i]=dis[d]+g[d][i]; if(!vis[i]){ vis[i]=1; que.push(i); } } } } int l=1; for(int i=1;i<=n;i++){ if(dis[i]>dis[l]){ l=i; } } printf("The longest path from %d has length %d, finishing at %d.\n\n",s,dis[l],l); } int main() { int n; int counter=0; while(~scanf("%d",&n) && n!=0){ counter++; int s; scanf("%d",&s); int u,v; memset(g,0,sizeof(g)); memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis)); while(scanf("%d%d",&u,&v) && (u!= 0 && v!=0)){ g[u][v]=1; } printf("Case %d: ",counter); spfa(n,s); } return 0; }