zoukankan      html  css  js  c++  java
  • Zju1061Web Navigation 网络导航

    标准网络浏览所包括的特征是在最近访问过的网页间向后或向前浏览。一种可以实现这些特性的方法是使用两个栈来记录向前或向后可以到达的网页。在这个问题中,你将被要求实现这些特性。
    下面的命令是需要浏览器支持的:
    BACK:将当前网页压入forward栈顶,弹出backward的栈顶网页,并将其定为新的当前网页。如果backward栈空,则该命令无效。
    FORWARD:将当前页压入backward栈顶,弹出forward的栈顶页,并将其定为新的当前网页。如果forward栈空,则该命令无效。
    VISIT :将当前页压入backward栈顶,将规定的URL定为新的当前页并且清空forward栈。
    QUIT:退出浏览。
    假定浏览器最初装载的网页的URL为: http://www.acm.org/

    输入
    输入文件包含一个命令序列。命令关键字为大写的BACK,VISIT,和QUIT。URL地址没有空格并且至多包含70个字符。你可以假定在任何时刻每个栈中的元素都不超过100个。输入文件以QUIT命令结束。

    输出
    对每个命令(除了QUIT),如果没有被忽略则输出在执行了命令之后的当前网页的URL;否则输出"Ignored"。每个命令的输出应在与它的输入相对应的一行,且只一行。不会有只包含QUIT命令的输入文件。

    样例
    输入
    VISIT http://acm.ashland.edu/
    VISIT http://acm.baylor.edu/acmicpc/
    BACK
    BACK
    BACK
    FORWARD
    VISIT http://www.ibm.com/
    BACK
    BACK
    FORWARD
    FORWARD
    FORWARD
    QUIT
    输出
    http://acm.ashland.edu/
    http://acm.baylor.edu/acmicpc/
    http://acm.ashland.edu/
    http://www.acm.org/
    Ignored
    http://acm.ashland.edu/
    http://www.ibm.com/
    http://acm.ashland.edu/
    http://www.acm.org/
    http://acm.ashland.edu/
    http://www.ibm.com
    Ignored

    Sol:看到许多人都是用了两个stack,其实没必要。

    开个top1代表目前的栈顶指针,top2代表从前曾走过的最远的栈顶指针。

    于是如果是先回退后,再前进的话,就可以一直前进,当然top1不能超过top2.

    但是注意,如果是回退了一些网站,又重新访问一个网站,则从前的记录要清掉,只要设top2=top1就好了。

    #include<bits/stdc++.h>
    using namespace std;
    string sstack[100000];
    int main()
    {
        string opt;
        int top1=1,top2=1;
        sstack[1]="http://www.acm.org/";
        while(1)
        {
            bool flag=false;
            cin>>opt;
            if(opt=="VISIT")
            {
                cin>>sstack[++top1];
                top2=top1; 
                //记得top2改为top1的值,这样从前后退的记录清空了 
            }
            if(opt=="BACK")
            {
                if(top1!=1)
                      top1--;
                else
                      flag=true; 
            }
            if(opt=="FORWARD")
            {
                if(top1!=top2) //从前有后退的记录,现在可以向前走 
                    top1++;
                else
                    flag=1;
            }
            if(opt=="QUIT")
    		    return 0;
            if(flag!=true)
                 cout<<sstack[top1]<<endl;
            else 
    		     puts("Ignored");
        }
    }
    

      

  • 相关阅读:
    PHP IDE NetBeans代码主题和除掉竖线解决方案
    初识Python
    从LazyPhp说起
    从Pycharm说起
    准备系统地研究一下"高性能网站开发",挑战很大,希望能坚持到底!
    IIS日志分析[资源]
    见一好东西:Threaded WebDownload class with Progress Callbacks
    ASP.net Application 中使用域用户登录
    看图找错
    汉字转拼音缩写的函数(C#)
  • 原文地址:https://www.cnblogs.com/cutemush/p/13771552.html
Copyright © 2011-2022 走看看