思路:鄰接表表示,以任意數爲起點,不走走過的邊,可以走三步就是一種轉發路徑
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 10005
#define MAXM 100005
struct node{
int to,next;
}edge[MAXM];
int head[MAXN];
int cnt,sum;
void add(int a,int b)
{
node E={b,head[a]};
edge[cnt]=E;
head[a]=cnt++;
}
void dfs(int from,int to,int num)
{
if (num==3)
{
sum++;
return;
}
for (int i=head[to];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if (v!=from)
{
dfs(to,v,num+1);
}
}
}
int main()
{
int n,m,a,b;
while (cin>>n>>m)
{
cnt=0;sum=0;
memset(head,-1,sizeof(head));
for (int i=0;i<m;i++)
{
cin>>a>>b;
add(a,b);
add(b,a);
}
for (int i=1;i<=n;i++)
dfs(i,i,0);
cout<<sum<<endl;
}
return 0;
}