Code:
#include<bits/stdc++.h>
using namespace std;
const int inf=2147483647;
const int maxn=510,maxm=5100;
int n,m,i,j,x,mp[maxn],f[maxn][maxn];
bool In_queue[maxn];
queue<int> p;
void init(int i){
char s[10001]={""};
int sum=0,l=0,c[10001]={0};
getchar();getchar();gets(s);
s[strlen(s)]=' ';
for (int i=0;i<strlen(s);i++)
if (s[i]==' ') c[++l]=sum,sum=0;
else sum=sum*10+s[i]-48;
for (int i=1;i<=l;i++)
for (int j=i;j<=l;j++)
f[c[i]][c[j]]=f[c[j]][c[i]]=1;
}
int main(){
scanf("%d%d",&m,&n);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
f[i][j]=inf;
for (i=1;i<=m;i++) init(i);
for (i=0;i<=n;i++) mp[i]=inf;
p.push(1);In_queue[1]=1;mp[1]=0;
while (!p.empty()){
x=p.front();p.pop();In_queue[x]=0;
for (i=1;i<=n;i++)
if (f[x][i]!=inf&&mp[i]>mp[x]+f[x][i]&&x!=i){
mp[i]=mp[x]+f[x][i];
if (!In_queue[i]){
In_queue[i]=1;
p.push(i);
}
}
}
if (mp[n]==inf) printf("-1");
else printf("%d\n",mp[n]);
return 0;
}
SPFA都不会打了,我退役吧…… 找出错误者无条件互关。