POJ 1847 Tram 最短路
#include <set> #include <map> #include <list> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <cctype> #include <cstdio> #include <string> #include <vector> #include <cassert> #include <cstdlib> #include <cstring> #include <sstream> #include <iostream> #include <algorithm> 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"<<endl; else cout<<dis[a][b]<<endl; return 0; }
直接贴代码了...就是一个水题最短路,用多源也不会有事
把每个不用按开关的点的权值(也就是i+1行的第一个权值)赋为0,其他的赋为1
初始化的时候注意自己到自己的情况为0,其余的为INF