原题链接:http://www.dotcpp.com/oj/problem1433.html?sid=714312&lang=1#editor
这里我采用的是深搜的思想
#include <iostream>
using namespace std;
int net[1000][2000];
int vis[1000];
int ans,way[1000],cnt[1000];
int m,n;
void dfs(int x,int y,int step)
{
way[step]=x;
vis[x]=1;
if(x==y)
{
ans++;
for(int i=1;i<step;i++)
if(way[i])
cnt[way[i]]++;
}
else{
for(int i=1;i<=m;i++)
{
if(net[i][x]&&!vis[i])
{
dfs(i,y,step+1);
vis[i]=0;
}
}
}
}
int main()
{
cin>>m>>n;
int a,b;
for(int i=0;i<n;i++)
{
cin>>a>>b;
net[a][b]=1;
net[b][a]=1;
}
cin>>a>>b;
dfs(a,b,0);
int num=0;
if(ans==0)
cout<<-1<<endl;
else{
for(int i=1;i<=m;i++)
{
if(ans==cnt[i])
num++;
}
cout<<num<<endl;
}
return 0;
}