题目描述
给定有向图G(无重边和自环),以及起点s和终点t,请计算s->t的所有简单路径的数目。
输入格式
第一行四个整数n,m,s,t,表示点的数目和边的数目以及起点和终点。
接下来m行,每行三个整数u,v,w,表示图中的一条边,这条边是从u指向v,长度为w。
输出格式
一行,一个整数,表示s->t的所有简单路径数目。
如果不存在简单路径,则输出-1。
样例输入
5 6 1 4
1 2 1
1 3 1
2 4 2
3 4 1
1 5 1
4 5 1
样例输出
2
问题提示
对于100%的数据,n<=100,m<=2*n。
给出的s和t保证不相等。
#include<bits/stdc++.h>
using namespace std;
int g[101][101];
int visit[101];
int n,s,t,ans;
void dfs(int cur)
{
if(cur==t)
{
ans++;
}
for(int i=1;i<=n;i++)
{
if(g[cur][i]!=0 && !visit[i])
{
visit[i]=1;
dfs(i);
visit[i]=0;
}
}
}
int main()
{
int m,u,v,w;
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++)
{
cin>>u>>v>>w;
g[u][v]=w;
}
visit[s]=1;
dfs(s);
if(ans==0)
{
cout<<"-1"<<endl;
}
else
{
cout<<ans<<endl;
}
return 0;
}