#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int a[N+10][N+10];
int book[N+10];
int n,m,start,goal;
int rec[N+10];
int c[N+10];
int sum;
void f(int num)
{
for(int i=1;i<=num-2;i++) //num-2 en
{
c[rec[i]]++;
}
}
void dfs(int pos,int num)
{
if(pos==goal)
{
sum++;
f(num);
return;
}
for(int i=1;i<=n;i++)
{
if(!book[i]&&a[pos][i])
{
book[i]=1;
rec[num]=i;
dfs(i,num+1);
book[i]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
a[u][v]=a[v][u]=1;
}
scanf("%d%d",&start,&goal);
book[start]=1;
dfs(start,1);
//for(int i=1;i<=n;i++) printf("%d ",c[i]);printf("\n");
int ans=0;
for(int i=1;i<=n;i++) if(c[i]==sum) ans++;
if(sum==0) printf("-1\n");
else printf("%d\n",ans);
return 0;
}
危险系数
图的深搜练习-2
最新推荐文章于 2021-11-02 17:16:45 发布