#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
#include<set>
#include<stack>
#include<iostream>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
#define MAXN 110
#define MAX 0x7ffffff
int mp[MAXN][MAXN];
int dis[MAXN][MAXN];
int n,m;
int min(int x,int y)
{
return x>y?y:x;
}
void floyd()
{
int i,j,k;
int ans=MAX;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
dis[i][j]=mp[i][j];
}
for(k=1;k<=n;k++)
{
for(i=1;i<k;i++)
{
for(j=i+1;j<k;j++)
{
ans=min(ans,dis[i][j]+mp[i][k]+mp[k][j]);
}
}
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];
}
}
}
if(ans==MAX)
printf("It's impossible.\n");
else
printf("%d\n",ans);
return ;
}
int main()
{
int i,j,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
mp[i][j]=MAX;
}
}
for(i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(c<mp[a][b])
mp[a][b]=mp[b][a]=c;
}
floyd();
}
return 0;
}
-------------------------可以去百度下 黄劲松的 《图论中的环与块》
#include<stdlib.h>
#include<string.h>
#include<queue>
#include<set>
#include<stack>
#include<iostream>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
#define MAXN 110
#define MAX 0x7ffffff
int mp[MAXN][MAXN];
int dis[MAXN][MAXN];
int n,m;
int min(int x,int y)
{
return x>y?y:x;
}
void floyd()
{
int i,j,k;
int ans=MAX;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
dis[i][j]=mp[i][j];
}
for(k=1;k<=n;k++)
{
for(i=1;i<k;i++)
{
for(j=i+1;j<k;j++)
{
ans=min(ans,dis[i][j]+mp[i][k]+mp[k][j]);
}
}
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];
}
}
}
if(ans==MAX)
printf("It's impossible.\n");
else
printf("%d\n",ans);
return ;
}
int main()
{
int i,j,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
mp[i][j]=MAX;
}
}
for(i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(c<mp[a][b])
mp[a][b]=mp[b][a]=c;
}
floyd();
}
return 0;
}
-------------------------可以去百度下 黄劲松的 《图论中的环与块》