题意:找一条四边的路径,保住中间两个节点编号只能出现一次(起点(首)和终点(未)可以一样)
else{if(k==3&&to==Begin){//首未一样的情况(前提是未已经是四边的最后一点了) dfs(to,k+1);}
ACcode:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e4+10;
vector<int>v[N];
bool vis[N];
int n,m,cnt,Begin;
void dfs(int u,int k){if(k==4){//结束,找到 cnt++;return;}for(auto to:v[u]){if(!vis[to]){vis[to]=true;dfs(to,k+1);vis[to]=false;}else{if(k==3&&to==Begin){//首未一样的情况(前提是未已经是四边的最后一点了) dfs(to,k+1);}}}
}
void solve(){cin>>n>>m;for(int i=1;i<=m;i++){int u,vv;cin>>u>>vv;v[u].push_back(vv);v[vv].push_back(u);}for(int i=1;i<=n;i++){vis[i]=true;Begin=i;dfs(i,1);vis[i]=false;}cout<<cnt<<"\n";
}
signed main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int tt=1;//cin>>tt;while(tt--)solve(); return 0;
}
over~