题解:给你几个点和几条边,让你求任意两点之间的最短路,并且自己到达自己的不算,求出路径长度不同的分别有几条
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int N=210;
int dis[N][N],ans[N];
int n,m;
int main()
{
int u,v;
while(~scanf("%d",&n) && n)
{
scanf("%d",&m);
memset(dis,INF,sizeof(dis));
memset(ans,0,sizeof(ans));
for(int i=0;i<n;i++) dis[i][i]=0;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
dis[u][v]=1;
dis[v][u]=1;
}
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
int maxx=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(dis[i][j]&&dis[i][j]!=INF)
ans[dis[i][j]]++,maxx=max(maxx,dis[i][j]);
for(int i=1;i<=maxx;i++)
printf("%d %d\n",i,ans[i]);
}
return 0;
}