思路和代码一起的,dfs搜索传话人,找到或者找不到都记录,最后输出
Code:
#include<iostream>//越长越臭的开头
#include<algorithm>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
long long n, k, m, cnt, a, v, vis[100001];
vector<long long> g[100001];
//a是当前访问过的人,b是要寻找的发起者
bool dfs(int a, int b) {
vis[a] = 1;
for (int i = 0; i < g[a].size(); i++) {
int v = g[a][i];
if (vis[v] == 0) {
if (dfs(v, b)) {
return true;
}
} else if (vis[v] == 1) {
if (v == b) {//如果这一个传话者被访问过了,就判断一下他是不是我们要寻找的访问者
return true;//如果是就返回true
}
}
}
vis[a] = -1;//马上去做下一次
return false;//如果找不到就滚出去,你被false了
}
int main() {
cin >> n >> m;//简朴输入,最好用scanf
for (int i = 1; i <= m; i++) {
cin >> a >> v;
g[a].push_back(v);
}
for (int i = 1; i <= n; i++) {
memset(vis, 0, sizeof(vis));//初始化
if (dfs(i, i)) {
cout << "T" << endl;
} else {
cout << "F" << endl;//简朴输出,最好用 printf
}
}
return 0;
}
点个赞吧