#include<iostream>
#include<vector>
using namespace std;
int n,m;//节点个数和线路
int sum =0;//总路径条数
//int l[5];//用于打出路径
struct jiedian{//每个节点
bool isup=false;//是否已经用过
bool ist=false;//是否是头节点
vector<int> down;//下面连接了哪些节点,用于后面遍历
};
struct jiedian jd[10005];
void dfs(int d,int step){
if(step==4&&jd[d].ist){//如果最后一步并且最后一个节点是头结点,形成一个闭环
//l[4] = d;//储存路径
sum++;
// for(int k=1;k<=3;k++){//输出一条完整的路径
// cout<<l[k]<<"->";
// }
// cout<<l[4]<<endl;
return;//回溯
}
if(!jd[d].isup){//如果节点未被使用
jd[d].isup = true;
//l[step] = d;//存储节点路径
if(step==4){//如果到最后一步
// for(int k=1;k<=3;k++){
// cout<<l[k]<<"->";
// }
// cout<<l[4]<<endl;
sum++;
jd[d].isup = false;//将节点重置为未被使用状态
return;//回溯
}
for(int i=0;i<jd[d].down.size();i++){//遍历当前节点下所有连接节点
dfs(jd[d].down[i],step+1);
}
jd[d].isup = false;//重置当前节点状态
}
return;//回溯
}
int main(){
cin>>n>>m;
int a,b;
for(int i=0;i<m;i++){
cin>>a>>b;
jd[a].down.push_back(b);
jd[b].down.push_back(a);
}
for(int i=1;i<=n;i++){
int step = 1;
jd[i].ist = true;//确定头节点
dfs(i,step);
jd[i].ist = false;//头节点重置
}
cout<<sum;
return 0;
}
有什么办法能解决最后一个的超时呢