出现的问题在图里
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,s1,t1,s2,t2,ans=0;
int k[3010][3010];
int bfs(int x)
{
queue <int> q;
bool g[3010]={};//g是用来判断去没去过某个城市。
int d[3010]={};//d是写入某一点的上一点是哪。如3->6,那d[6]=3;
q.push(1);
g[1]=true;
d[1]=0;
while(!q.empty())
{
if(q.front()==x)
{
int t=0,tt=x;
while(tt!=1)
{
k[min(tt,d[tt])][max(tt,d[tt])]++;//走过的路k++就大于1了。
tt=d[tt];
t++;
}
return t;
}
for(int i=1;i<=n;i++)
{
if(k[min(q.front(),i)][max(q.front(),i)]&&!g[i])
{
q.push(i);
d[i]=q.front();//记录d[i]的上一点。也是这里出的问题。
g[i]=true;
}
}
q.pop();
}
return -1;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(x==y) continue;//自环不计
else if(k[min(x,y)][max(x,y)]==1) continue; //重复不计
else k[min(x,y)][max(x,y)]=1; //我这里为了方便,不统计重复和自环的路。
} //这里记小数到大数。
scanf("%d%d%d%d",&s1,&t1,&s2,&t2);
int k1=bfs(s1),k2=bfs(s2);
if(k1==-1||k2==-1||k1>t1||k2>t2)
{
printf("-1");
}
else
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(k[i][j]>1) ans++; //去过的路他的值一定大于1
printf("%d",m-ans); //那去掉的路就为m-ans了
}
return 0;
}
