参考来自: /* floyd 的扩展 找最小环*/#include#define maxn 200#define inf 0xffffffint n,m;int dis[maxn][maxn],g[maxn][maxn],path[maxn],pre[maxn][maxn];int min,cnt,mid;void floyd(){ int i,j,k; for(k=1;k<=n;k++) { for(i=1;i …->j { path[cnt++]=mid; mid=pre[i][mid]; } path[cnt++]=i; path[cnt++]=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];//更新前驱 } } } }}int main(){ int i,j,a,b,c; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { dis[i][j]=inf; g[i][j]=inf; pre[i][j]=i; } dis[i][i]=g[i][i]=0; } for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); if(c