给你几个点和几条边,让你求任意两点之间的最短路,并且自己到达自己的不算,求出路径长度不同的分别有几条
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<math.h>
#include<cstdlib>
using namespace std;
const int maxn=200+10;
int num[maxn][maxn];
int coun[maxn];//任意两点之间的长度最多200
const int INF=0x3f3f3f3f;
int main()
{
int v;
int E;
int a,b;
while(~scanf("%d",&v)&&v)
{
scanf("%d",&E);
for(int i=0; i<v; i++)
for(int j=0; j<v; j++)
num[i][j]=INF;
memset(coun,0,sizeof(coun));
for(int i=0; i<E; i++)
{
scanf("%d%d",&a,&b);
num[a][b]=1;
num[b][a]=1;
}
for(int k=0; k<v; k++)
for(int i=0; i<v; i++)
for(int j=0; j<v; j++)
if(num[i][j]>num[i][k]+num[k][j])
num[i][j]=num[i][k]+num[k][j];
for(int i=0; i<v; i++)
for(int j=i+1; j<v; j++)//忽略掉自己到达自己的点
if(num[i][j]!=INF)
coun[num[i][j]]+=2;
for(int i=1; i<=200; i++)
{
if(coun[i])
printf("%d %d\n",i,coun[i]);
}
}
return 0;
}