题目链接:http://poj.org/problem?id=1028
注意:
1、用两个栈来模拟,一个用来存可以返回的,一个用来存可以前进的。
2、visit方法,就要将可以前进的栈清空。
3、back方法,将当前的网页给可以前进的栈,而可以返回的栈出栈一个元素。
4、forward方法,将当前网页存给可以返回的栈,将可以前进的栈出栈一个元素,变成当前网页。
#include <iostream> #include <stack> #include <string> using namespace std; stack<string> bstack,fstack; string current; void visit() { if(current!="") bstack.push(current); cin>>current; cout<<current<<endl; while(!fstack.empty()) ///把以前的清空 fstack.pop(); return; } void back() { if(bstack.empty()) { cout<<"Ignored "; return; } fstack.push(current); ///把当前的放到以前的栈中 current=bstack.top(); ///获得新的当前网页 bstack.pop(); cout<<current<<endl; } void forward() { if(fstack.empty()) { cout<<"Ignored "; return; } bstack.push(current); ///当前的网页给现在的栈 current=fstack.top(); ///当前的网页变成以前的网页 fstack.pop(); cout<<current<<endl; } int main() { string cmd; current="http://www.acm.org/"; while(cin>>cmd&&cmd!="QUIT") { if(cmd=="VISIT") visit(); else if(cmd=="FORWARD") forward(); else if(cmd=="BACK") back(); } return 0; }