C++ 斯波吉·斯加文特

C++ 斯波吉·斯加文特,c++,dictionary,stl,C++,Dictionary,Stl,我得到了错误的答案,尽管代码在所有测试用例上都很有趣。 有人能帮我解决我的代码缺失的问题吗??我正在使用stl地图和简单dfs打印问题中提出的路线 #include<cstdio> #include<iostream> #include<map> #include<list> #include<cstring> #define tr(c,it) for(typeof(c.begin()) it=c.begin();it!=c.end()

我得到了错误的答案,尽管代码在所有测试用例上都很有趣。 有人能帮我解决我的代码缺失的问题吗??我正在使用stl地图和简单dfs打印问题中提出的路线

#include<cstdio>
#include<iostream>
#include<map>
#include<list>
#include<cstring>
#define tr(c,it) for(typeof(c.begin()) it=c.begin();it!=c.end();++it)
using namespace std;
map<int,string> city;
list<int> *adj;
bool *visited;
void dfs(int s) {
    visited[s]=true;
    cout<<city[s]<<endl;
    tr(adj[s],it) {
        if(!visited[*it])
            dfs(*it);
    }
}   
main() {
    int t;
    scanf("%d",&t);
    for(int i=1;i<=t;++i) {
        map<string,int> mymap;
        int n;
        scanf("%d",&n); 
        visited=new bool[n+1];
        memset(visited,false,sizeof(visited));
        adj=new list<int>[n+1];
        int indegree[n+1];
        for(int j=0;j<=n;++j) indegree[j]=0;
        int index=1;
        for(int j=0;j<n-1;++j) {
            string n1,n2;
            cin>>n1>>n2;
            if(!mymap[n1]) {
                mymap[n1]=index++;
                city[index-1]=n1;
            }
            if(!mymap[n2]) {
                mymap[n2]=index++;
                city[index-1]=n2;
            }
            adj[mymap[n1]].push_back(mymap[n2]);
            indegree[mymap[n2]]++;
        }
        int start;
        for(int j=1;j<=n;++j) {
            if(indegree[j]==0) {
                start=j;
                break;
            }
        }
        printf("Scenario #%d:\n",i);
        dfs(start);
        printf("\n");
        city.clear();
    }
    return 0;
}
#包括
#包括
#包括
#包括
#包括
#定义tr(c,it)(typeof(c.begin())it=c.begin();it!=c.end();++it)
使用名称空间std;
地图城市;
列表*adj;
布尔*访问;
无效dfs(整数s){
已访问=正确;
cout如果我注释掉如果(!visted[*it])你的代码通过了所有测试用例。你为什么还需要访问的数组呢?每个邻接列表将只有一个子节点,除了最后一个叶节点