点击打开链接
//floyd 有向图
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100+5;
const int INF=1e6;
int G[maxn][maxn];
int v,start,en;
int main()
{
while(scanf("%d%d%d",&v,&start,&en)==3)
{
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++)
if(i==j) G[i][j]=0;
else G[i][j]=INF;
for(int i=1;i<=v;i++)
{
int num;
scanf("%d",&num);
for(int j=0;j<num;j++)
{
int x;
scanf("%d",&x);
if(!j) G[i][x]=0;
else G[i][x]=1;
}
}
for(int k=1;k<=v;k++)
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++)
G[i][j]=min(G[i][j],G[i][k]+G[k][j]);
if(G[start][en]<INF) printf("%d\n",G[start][en]);
else printf("-1\n");
}
return 0;
}
POJ 1847 floyd
最新推荐文章于 2021-08-12 20:58:42 发布