C++ 斯波吉·斯加文特
我得到了错误的答案,尽管代码在所有测试用例上都很有趣。 有人能帮我解决我的代码缺失的问题吗??我正在使用stl地图和简单dfs打印问题中提出的路线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()
#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])你的代码通过了所有测试用例。你为什么还需要访问的数组呢?每个邻接列表将只有一个子节点,除了最后一个叶节点