在这段代码中,我们尝试使用深度优先搜索来遍历图中的所有节点,并按照一定的顺序输出。然而,我们在遍历的过程中没有对节点进行标记,导致可能会出现重复遍历的情况。正确的做法是在遍历节点之前将其标记为已访问,并在递归调用之前检查节点是否已被访问。

另外,我们可以使用一个辅助函数来简化代码,将输出字符的操作放在函数中,递归调用函数进行遍历。这样可以避免重复的代码。

修改后的代码如下所示:

#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;
}

这样修改后的代码应该可以正确地输出结果

#pragma GCC optimize1#pragma GCC optimize2#pragma GCC optimize3Ofastinline#includebitsstdtr1c++husing namespace std;inline static const nullptr_t _= iossync_with_stdio0; cintienullptrcouttienull

原文地址: http://www.cveoy.top/t/topic/ievj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录