floyd,,,数组太大了,拿了60分,先粘上代码稍后学习。。。
#include <iostream>
#include <stdio.h>
#include <memory.h>
#define NUM 1005
#define INF 0x3f3f3f3f
using namespace std;
int n;
int dis[NUM][NUM];
int g[NUM][NUM];
void Floyd()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
dis[i][j]=g[i][j];
}
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(dis[i][j]>dis[i][k]+dis[k][j])
{
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
}
int m;
int main() {
cin>>n;
cin>>m;
memset(g,INF,sizeof(g));
int a,b;
for(int i=0;i<m;i++)
{
cin>>a>>b;
g[a][b]=1;
}
Floyd();
int counter=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(dis[i][j]!=INF&&dis[j][i]!=INF)
{
//printf("i:%d j:%d\n",i,j);
counter++;
}
}
}
cout<<counter<<endl;
return 0;
}