0

dfs のコードを書いているときに、次のエラーが発生しました。

dfs.cpp: In function ‘void dfs(int, std::vector<std::vector<int> >&)’:
dfs.cpp:92:1: error: ‘class std::stack<int>’ has no member named ‘begin’
dfs.cpp:92:1: error: ‘class std::stack<int>’ has no member named ‘end’
dfs.cpp:92:1: error: ‘class std::stack<int>’ has no member named ‘begin’
dfs.cpp:92:1: error: template argument 1 is invalid

スタックを反復処理したいのですが、イテレータを使用して通常の方法で使用すると、上記のエラーが発生します。誰か助けてくれませんか。STLで。

#define MAX 100
#define FIT(it,v) for (typeof(v.begin()) it = v.begin(); it != v.end(); it++)
bool visit[MAX];
void dfs(int start,vector< vector<int>  >&v){
stack<int> S;
S.push(start);
while(S.empty()==false){
cout<<"stack:";
FIT(it,S)cout<<*it<<" ";
cout<<"\n";
int node=S.top();
S.pop();
cout<<node<<" ";
visit[node]=true;
FOR(i,0,sz(v[node])){
if(!visit[v[node][i]])S.push(v[node][i]);
}
}
return;
}

int main(){
printf("here is dfs\n");
printf("enter number of vertices\n");
int n=SI;
vector< vector<int> > v(n);
printf("enter number of edges\n");
int m=SI;
FOR(i,0,m){int a=SI,b=SI;v[a].pb(b);v[b].pb(a);}
FOR(i,0,n)if(!visit[i]){dfs(i,v);cout<<"\n";}
cout<<"\n";
    return 0;
}
4

1 に答える 1

2

スタックには反復子がありません。ベクトルを使用し、とpush_backをおよびに置き換えます。pushpop_backpopbacktop

于 2013-05-30T20:07:05.463 に答える