题意:找一条四边的路径,保住中间两个节点编号只能出现一次(起点(首)和终点(未)可以一样)
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~