本文共 963 字,大约阅读时间需要 3 分钟。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;const int INF = 0x3fffffff;const int V = 200;int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n,a,b,i,j,k; int dis[V][V]; cin>>n>>a>>b; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==j) dis[i][j]=0; else dis[i][j]=INF; } } for(i=1;i<=n;i++) { int m; cin>>m; for(j=1;j<=m;j++) { int p ; cin>>p; if(j==1) dis[i][p]=0; else dis[i][p]=1; } } for(i=1;i<=n;i++) for(j=1;j<=n;j++) for(k=1;k<=n;k++) if(dis[j][k] > dis[j][i] + dis[i][k] ) dis[j][k] = dis[j][i] + dis[i][k]; if(dis[a][b]==INF) cout<<"-1"<
直接贴代码了...就是一个水题最短路,用多源也不会有事
把每个不用按开关的点的权值(也就是i+1行的第一个权值)赋为0,其他的赋为1
初始化的时候注意自己到自己的情况为0,其余的为INF
转载于:https://www.cnblogs.com/Felix-F/archive/2012/08/19/3223653.html