CCFCSP 201709-4 通信网络(100score)

题目来自CCF CSP认证


在这里插入图片描述
在这里插入图片描述


思路分析

主要思路:进行暴力深度遍历。


代码解析

#include<iostream>
#include<vector>
#include<string.h> 
using namespace std;

int mp[1001][1001];    //邻接矩阵 
int vis[1200];   //标记访问 
vector<int>  vec[1001];   //每一直接相连的点的集合 
//exp为该路径经过的点,start为起始点 
void dfs(int exp, int start) {
    
    
	vis[exp] = 1;
	mp[start][exp] = 1;
	mp[exp][start] = 1;
	//遍历与start相连的所有的点 
	for (int i = 0; i < vec[exp].size(); ++i) {
    
      
		if (!vis[vec[exp][i]]) {
    
    
			dfs(vec[exp][i], start);
		}
	}
}
int main()
{
    
    
	ios::sync_with_stdio(false);
	int N, M;
	cin.tie(0);
	cin >> N >> M;
	//矩阵初始化 
	for (int i = 1; i <= N; ++i) {
    
    
		for (int j = 1; j <= N; ++j)
			mp[i][j] = 0;
	}
	int start, end;
	//数据读入 
	for (int i = 1; i <= M; ++i) {
    
    
		cin >> start >> end;
		vec[start].push_back(end);
	}
	//每一个点进行深度遍历 
	for (int i = 1; i <= N; ++i) {
    
    
		memset(vis, 0, sizeof(vis));
		dfs(i, i);
	}
	int ans = 0;
	for (int i = 1; i <= N; ++i) {
    
    
		int j;
		//每一个点都与其他点相连时 
		for (j = 1; j <= N; ++j) {
    
    
			if (!mp[i][j])
				break;
		}
		//都相连时 
		if (j == N + 1)
			ans++;
	}
	printf("%d",ans);
	return 0;
}

测试结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/108438889