危险系数 (dfs 求割点个数)

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int mp[1005][1005];
vector<int> path;
int cnt[1050];
bool vis[1050] ;
int n,m;
int x,y,ans = 0,flag = 0;
void dfs(int x){
	if(x == y){
		++ flag;
		for(int i = 1;i < path.size();i ++){
			++ cnt[path[i]];
		}
		return;
	}
	for(int i = 1;i <= n;i ++){
		if(mp[x][i] && vis[i] == 0){
			path.push_back(i),vis[i] = 1;
			dfs(i);
			path.pop_back(),vis[i] = 0;
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i = 1;i <= m;i ++){
		 cin>>x>>y;
		 mp[x][y] = 1;
		 mp[y][x] = 1;
	}
	cin>>x>>y;
	vis[x] = 1;;
	dfs(x);
	if(flag == 0) cout<<"-1"<<endl;
	else{
		for(int i = 1;i <= n;i ++){
			if(cnt[i] == flag){
				++ ans;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/weixin_41988889/article/details/89578368