循环依赖
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
const int MAX = 10000;
vector<int> graph[MAX];
int visited[MAX] = {0};
int inStack[MAX] = {0};
stack<int> stk;
vector<int> result;
bool dfs(int u) {
if (visited[u] == 1) {
if (!stk.empty() && inStack[u] == 1) {
while (!stk.empty() && stk.top() != u) {
result.push_back(stk.top());
stk.pop();
}
result.push_back(u);
stk.pop();
return true;
} else {
return false;
}
}
visited[u] = 1;
stk.push(u);
inStack[u] = 1;
for (int v : graph[u]) {
if (dfs(v)) {
return true;
}
}
inStack[u] = 0;
stk.pop();
return false;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < MAX; i++) {
graph[i].clear();
}
for (int i = 0; i < n; i++) {
int k;
cin >> k;
int a;
cin >> a;
for (int j = 0; j < k - 1; j++) {
int b;
cin >> b;
graph[a].push_back(b);
}
}
for (int i = 1; i < MAX; i++) {
if (visited[i] == 0) {
if (dfs(i)) {
break;
}
}
}
if (!result.empty()) {
reverse(result.begin(), result.end());
int minValue = *min_element(result.begin(), result.end());
int index = find(result.begin(), result.end(), minValue) - result.begin();
vector<int> finalResult(result.begin() + index, result.end());
finalResult.insert(finalResult.end(), result.begin(), result.begin() + index + 1);
for (int node : finalResult) {
cout << node << " ";
}
}
return 0;
}
// vx公众号关注TechGuide,专业生产offer收割机,代码可能需要少量调试。
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
const int MAX = 10000;
vector<int> graph[MAX];
int visited[MAX] = {0};
int inStack[MAX] = {0};
stack<int> stk;
vector<int> result;
bool dfs(int u) {
if (visited[u] == 1) {
if (!stk.empty() && inStack[u] == 1) {
while (!stk.empty() && stk.top() != u) {
result.push_back(stk.top());
stk.pop();
}
result.push_back(u);
stk.pop();
return true;
} else {
return false;
}
}
visited[u] = 1;
stk.push(u);
inStack[u] = 1;
for (int v : graph[u]) {
if (dfs(v)) {
return true;
}
}
inStack[u] = 0;
stk.pop();
return false;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < MAX; i++) {
graph[i].clear();
}
for (int i = 0; i < n; i++) {
int k;
cin >> k;
int a;
cin >> a;
for (int j = 0; j < k - 1; j++) {
int b;
cin >> b;
graph[a].push_back(b);
}
}
for (int i = 1; i < MAX; i++) {
if (visited[i] == 0) {
if (dfs(i)) {
break;
}
}
}
if (!result.empty()) {
reverse(result.begin(), result.end());
int minValue = *min_element(result.begin(), result.end());
int index = find(result.begin(), result.end(), minValue) - result.begin();
vector<int> finalResult(result.begin() + index, result.end());
finalResult.insert(finalResult.end(), result.begin(), result.begin() + index + 1);
for (int node : finalResult) {
cout << node << " ";
}
}
return 0;
}
// vx公众号关注TechGuide,专业生产offer收割机,代码可能需要少量调试。
全部评论
相关推荐
03-19 17:53
武汉大学 算法工程师
暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。
卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂 点赞 评论 收藏
分享
查看11道真题和解析