一开始输出17 打印结果出来发现如果是这个点是源点那么标记一定不能去掉!!!否则重复
#include <iostream>
#include <vector>
using namespace std;
int n,m;
vector<int> v[100005];
int vis[10005];
//int ans[4];
int num=0;
void dfs(int yd,int now,int cnt)
{
if(cnt==4)//个数满了
{
num++;
/* for(int i=0;i<4;i++)
{
cout<<ans[i];
}
cout<<endl;*/
return;
}
for(int i=0;i<v[now].size();i++)
{
int temp=v[now][i];
if(vis[temp]==0||(cnt==3&&temp==yd))//没访问过
{cnt++;
vis[temp]=1;
//ans[cnt-1]=temp;
dfs(yd,temp,cnt);
cnt--;
if(temp!=yd)//这个地方注意
{
vis[temp]=0;
}
}
}
}
int main()
{
cin>>n>>m;//n为节点个数 m为路线条数
for(int i=0;i<m;i++)
{
int temp1,temp2;
cin>>temp1>>temp2;
v[temp1].push_back(temp2);
v[temp2].push_back(temp1);
}
for(int i=1;i<=n;i++)
{
vis[i]=1;
//ans[0]=i;
dfs(i,i,1);
vis[i]=0;
}
cout<<num;
return 0;
}