#pragma GCC optimize1#pragma GCC optimize2#pragma GCC optimize3Ofastinline#includebitsstdtr1c++husing namespace std;inline static const nullptr_t _= iossync_with_stdio0; cintienullptrcouttienull
在这段代码中,我们尝试使用深度优先搜索来遍历图中的所有节点,并按照一定的顺序输出。然而,我们在遍历的过程中没有对节点进行标记,导致可能会出现重复遍历的情况。正确的做法是在遍历节点之前将其标记为已访问,并在递归调用之前检查节点是否已被访问。
另外,我们可以使用一个辅助函数来简化代码,将输出字符的操作放在函数中,递归调用函数进行遍历。这样可以避免重复的代码。
修改后的代码如下所示:
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdtr1c++.h>
using namespace std;
inline static const nullptr_t _=[](){
ios::sync_with_stdio(0);
cin.tie(nullptr),cout.tie(nullptr);
return nullptr;
}();
int n;
vector<char> g[100005];
char ch=127,ch2=0;
tr1::unordered_map<char,bool> vis;
void dfs(char c){
cout.put(c);
vis[c] = true;
for(int i=0;i<g[c].size();i++){
if(!vis[g[c][i]]){
dfs(g[c][i]);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
char c1,c2;
cin>>c1>>c2;
ch=min(c1,c2);
ch2=max(c1,c2);
g[c1].emplace_back(c2);
g[c2].emplace_back(c1);
}
for(int i=ch;i<=ch2;i++) if(!g[i].empty()) stable_sort(g[i].begin(),g[i].end());
cout.put(ch);
dfs(ch);
cout.put(10);
return 0;
}
这样修改后的代码应该可以正确地输出结果
原文地址: http://www.cveoy.top/t/topic/ievj 著作权归作者所有。请勿转载和采集!