栈-铁轨-Java

Posted NEU-2015

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈-铁轨-Java相关的知识,希望对你有一定的参考价值。

问题描述:某城市有一个火车站。铁轨铺设如图所示。有N节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让他们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,可以借助中转站C,对于每个车,一旦进入c就不能再进入A,一旦c进入B就不能回到c。

测试数据

   输入样例:

    5
    5 4 3 2 1

    6
    6 5 4 3 2 1

    5
    5 4 1 2 3

  输出样例:

    Yes

    Yes

    No

 

import java.util.Scanner;
import java.util.Stack;
/**
 * 铁轨
 * @author NEU-2015
 *
 */
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int x;
        int[] array;
        Stack<Integer> stack = new Stack<Integer>();
        boolean flag;
        int a; 
        int b;
        while(input.hasNext()) {
            flag = true;
            b = 1;
            a = 1;
            x = input.nextInt();
            array = new int[x];
            for(int i = 0; i < x; i++) {
                array[i] = input.nextInt();
            }
            
            
            //关键部分
            while(a <= x) {
                if(array[a-1] == b) {     //1.进队 与 出队 相等
                    a++;
                    b++;
                } else if(!stack.empty() && stack.peek() == array[a-1]) { //2.进队 与 出队 不相等 但是 中间栈顶元素 与 出队 元素相等
                    stack.pop();
                    a++;
                } else if(b <= x) {  //3.进队 与 出队不相等 栈顶 与 出队 不相等 将进队元素压栈
                    stack.push(b++);
                } else {             //4.不可能出现输入中 的结果  结束循环
                    flag = false;
                    break;
                }
            }
            
            
            
            if(!flag) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
            }
        }
    }
}

 

以上是关于栈-铁轨-Java的主要内容,如果未能解决你的问题,请参考以下文章

铁轨(UVa 514)

UVA514铁轨

紫书140例题6-2 铁轨&&UVa514

数据结构练习专题

我的世界铁轨每隔多少放一个

我的世界游戏中怎么样才能建设弯的铁轨?