POJ1734-Sightseeing trip
http://poj.org/problem?id=1734
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define INF 0x7ffffff #define N 101 using namespace std; int map[N][N],dis[N][N],pre[N][N],path[N],n; int main(void) { int i,j,k,m,a,b,c,num,_min,tmp,p; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) { map[i][j]=dis[i][j]=INF; pre[i][j]=i; } while(m--) { scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=dis[a][b]=dis[b][a]=min(map[a][b],c); } _min=INF; for(k=1;k<=n;k++) { for(i=1;i<k;i++) { for(j=i+1;j<k;j++) { tmp=dis[i][j]+map[i][k]+map[k][j]; if(tmp<_min) { _min=tmp; num=0; p=j; while(p!=i) { path[num++]=p; p=pre[i][p]; } path[num++]=i; path[num++]=k; } } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(dis[i][j]>dis[i][k]+dis[k][j]) { dis[i][j]=dis[i][k]+dis[k][j]; pre[i][j]=pre[k][j]; } } } } if(_min==INF) puts("No solution."); else { printf("%d",path[0]); for(i=1;i<num;i++) printf(" %d",path[i]); puts(""); } } return 0; }