藍橋杯 歷屆試題 網路尋路
阿新 • • 發佈:2019-01-08
思路:鄰接表表示,以任意數為起點,不走走過的邊,可以走三步就是一種轉發路徑
#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; }