一段丑陋的代码
#include<bits/stdc++.h>
using namespace std;
long long i,j,k,mi,n,m,a[2005][2005],p,f[2005],dis[2005],l1,l2,l3;
long long l[2005];
int sb(int l,int r){
memset(a,127/3,sizeof(a));
dis[l]=0;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++){
k=0,mi=INT_MAX/3;
for(j=1;j<=n;j++){
if(f[j]==0&&dis[j]<mi){
mi=dis[j];
k=j;
}
}
f[k]=1;
for(j=1;j<=n;j++){
if(a[k][j]+dis[k]<dis[j]) dis[j]=a[k][j]+dis[k];
}
}
return dis[r];
}
int main(){
cin>>n>>m;
memset(a,127/3,sizeof(a));
for(i=1;i<=m;i++){
cin>>l1>>l2;
a[l1][l2]=a[l2][l1]=1;
}
cin>>p;
for(i=1;i<=p;i++){
cin>>l1>>l2;
int sum=0;
l3=sb(l1,l2);
for(int x=1;x<=n;x++){
if(sb(x,l1)+sb(x,l2)==l3) sum++;
}
cout<<sum<<endl;
}
}
但是输入p之后i只转了一次...在子函数里第一个for里的i加上了一个int之后主函数最下面的i就能转p次了...但是输出的答案全错了...有没有大佬解释一下(做不完这道题爸妈不让我去睡但是蒟蒻我根本不会只能骗分)
