<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      地鐵售票系統app實現

      Dijkstra類
      package com.example.subwayticke;

      import java.util.*;

      public class Dijkstra {

      public static int calculateShortestPath(Graph graph, Station start, Station end) {
          // 距離表,記錄從起點到每個站點的最短距離
          Map<Station, Integer> distances = new HashMap<>();
          // 優先隊列,按距離排序
          PriorityQueue<Station> queue = new PriorityQueue<>(Comparator.comparingInt(distances::get));
      
          // 初始化距離表
          for (Station station : graph.getAdjacencyList().keySet()) {
              distances.put(station, Integer.MAX_VALUE);
          }
          distances.put(start, 0); // 起點到自身的距離為0
          queue.add(start);
      
          // Dijkstra算法主循環
          while (!queue.isEmpty()) {
              Station current = queue.poll();
      
              // 如果找到終點,返回距離(不包括起點站)
              if (current.equals(end)) {
                  return distances.get(current) - 1; // 減去起點站
              }
      
              // 遍歷當前站點的所有相鄰站點
              for (Station neighbor : graph.getNeighbors(current)) {
                  int newDistance = distances.get(current) + 1; // 每站距離為1
                  if (newDistance < distances.get(neighbor)) {
                      distances.put(neighbor, newDistance);
                      queue.add(neighbor);
                  }
              }
          }
      
          // 如果沒有找到路徑,返回-1
          return -1;
      }
      

      }

      Graph類
      package com.example.subwayticke;

      import java.util.*;

      public class Graph {
      private Map<Station, List> adjacencyList;

      public Graph() {
          adjacencyList = new HashMap<>();
      }
      
      public void addStation(Station station) {
          adjacencyList.putIfAbsent(station, new ArrayList<>());
      }
      
      public void addConnection(Station station1, Station station2) {
          adjacencyList.get(station1).add(station2);
          adjacencyList.get(station2).add(station1);
      }
      
      public List<Station> getNeighbors(Station station) {
          return adjacencyList.getOrDefault(station, new ArrayList<>());
      }
      
      public Map<Station, List<Station>> getAdjacencyList() {
          return adjacencyList;
      }
      

      }
      Line類
      package com.example.subwayticke;

      import java.util.*;
      public class Line {
      private String name;
      private List stations;

      public Line(String name, List<Station> stations) {
          this.name = name;
          this.stations = stations;
      }
      
      public String getName() {
          return name;
      }
      
      public List<Station> getStations() {
          return stations;
      }
      

      }
      MainActivity類
      package com.example.subwayticke;

      import android.os.Bundle;
      import android.view.View;
      import android.widget.;
      import androidx.appcompat.app.AppCompatActivity;
      import java.util.
      ;

      public class MainActivity extends AppCompatActivity {

      private Spinner startStationSpinner;
      private Spinner endStationSpinner;
      private EditText ticketQuantityEditText;
      private Button buyTicketButton;
      private TextView resultTextView;
      
      private List<Line> lines;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      
          startStationSpinner = findViewById(R.id.startStationSpinner);
          endStationSpinner = findViewById(R.id.endStationSpinner);
          ticketQuantityEditText = findViewById(R.id.ticketQuantityEditText);
          buyTicketButton = findViewById(R.id.buyTicketButton);
          resultTextView = findViewById(R.id.resultTextView);
      
          initializeLines();
          setupSpinners();
          setupBuyTicketButton();
      }
      
      private void initializeLines() {
          lines = new ArrayList<>();
      
          // 1號線
          List<Station> line1Stations = Arrays.asList(
                  new Station("西王站", "1號線"),
                  new Station("時光街站", "1號線"),
                  new Station("長城橋站", "1號線"),
                  new Station("和平醫院站", "1號線"),
                  new Station("烈士陵園站", "1號線"),
                  new Station("新百廣場站", "1號線"),
                  new Station("解放廣場站", "1號線"),
                  new Station("平安大街站", "1號線"),
                  new Station("北國商城站", "1號線"),
                  new Station("博物院站", "1號線"),
                  new Station("體育場站", "1號線"),
                  new Station("北宋站", "1號線"),
                  new Station("談固站", "1號線"),
                  new Station("朝暉橋站", "1號線"),
                  new Station("白佛站", "1號線"),
                  new Station("留村站", "1號線"),
                  new Station("火炬廣場站", "1號線"),
                  new Station("石家莊東站", "1號線"),
                  new Station("南村站", "1號線"),
                  new Station("蛟河大道站", "1號線"),
                  new Station("西莊站", "1號線"),
                  new Station("東莊站", "1號線"),
                  new Station("會展中心站", "1號線"),
                  new Station("商務中心站", "1號線"),
                  new Station("園博園站", "1號線"),
                  new Station("福澤站", "1號線")
          );
          lines.add(new Line("1號線", line1Stations));
      
          // 2號線
          List<Station> line2Stations = Arrays.asList(
                  new Station("柳辛莊站", "2號線"),
                  new Station("莊窠 - 鐵道大學站", "2號線"),
                  new Station("義堂站", "2號線"),
                  new Station("建和橋站", "2號線"),
                  new Station("長安公園站", "2號線"),
                  new Station("北國商城站", "2號線"),
                  new Station("裕華路站", "2號線"),
                  new Station("槐中路站", "2號線"),
                  new Station("歐韻公園站", "2號線"),
                  new Station("元村站", "2號線"),
                  new Station("石家莊站", "2號線"),
                  new Station("塔壇站", "2號線"),
                  new Station("倉豐路留村站", "2號線"),
                  new Station("南位站", "2號線"),
                  new Station("嘉華路站", "2號線")
          );
          lines.add(new Line("2號線", line2Stations));
      
          // 3號線
          List<Station> line3Stations = Arrays.asList(
                  new Station("西三莊站", "3號線"),
                  new Station("高柱站", "3號線"),
                  new Station("柏林莊站", "3號線"),
                  new Station("市莊站", "3號線"),
                  new Station("市二中站", "3號線"),
                  new Station("新百廣場站", "3號線"),
                  new Station("東里站", "3號線"),
                  new Station("槐安橋站", "3號線"),
                  new Station("西三教站", "3號線"),
                  new Station("石家莊站", "3號線"),
                  new Station("匯通路站", "3號線"),
                  new Station("孫村站", "3號線"),
                  new Station("塔冢站", "3號線"),
                  new Station("東王站", "3號線"),
                  new Station("南王站", "3號線"),
                  new Station("位同站", "3號線"),
                  new Station("東二環南路站", "3號線"),
                  new Station("西仰陵站", "3號線"),
                  new Station("中仰陵站", "3號線"),
                  new Station("南豆站", "3號線"),
                  new Station("太行南大街站", "3號線"),
                  new Station("樂鄉站", "3號線")
          );
          lines.add(new Line("3號線", line3Stations));
      }
      
      private void setupSpinners() {
          List<Station> allStations = new ArrayList<>();
          for (Line line : lines) {
              allStations.addAll(line.getStations());
          }
      
          StationAdapter adapter = new StationAdapter(this, allStations);
          startStationSpinner.setAdapter((SpinnerAdapter) adapter);
          endStationSpinner.setAdapter((SpinnerAdapter) adapter);
      }
      
      private void setupBuyTicketButton() {
          buyTicketButton.setOnClickListener(v -> {
              Station startStation = (Station) startStationSpinner.getSelectedItem();
              Station endStation = (Station) endStationSpinner.getSelectedItem();
              int quantity = Integer.parseInt(ticketQuantityEditText.getText().toString());
      
              int price = TicketCalculator.calculatePrice(startStation, endStation, lines);
              int totalPrice = price * quantity;
      
              resultTextView.setText("購票成功!總價:" + totalPrice + "元");
          });
      }
      

      }
      Station類
      package com.example.subwayticke;

      import java.util.Objects;

      public class Station {
      private String name;
      private String line;

      public Station(String name, String line) {
          this.name = name;
          this.line = line;
      }
      
      public String getName() {
          return name;
      }
      
      public String getLine() {
          return line;
      }
      
      @Override
      public boolean equals(Object obj) {
          if (this == obj) return true;
          if (obj == null || getClass() != obj.getClass()) return false;
          Station station = (Station) obj;
          return name.equals(station.name) && line.equals(station.line);
      }
      
      @Override
      public int hashCode() {
          return Objects.hash(name, line);
      }
      
      @Override
      public String toString() {
          return name + " (" + line + ")";
      }
      

      }
      StationAdapter類
      package com.example.subwayticke;

      import android.content.Context;
      import android.view.View;
      import android.view.ViewGroup;
      import android.widget.ArrayAdapter;
      import android.widget.TextView;
      import java.util.List;

      public class StationAdapter extends ArrayAdapter {

      public StationAdapter(Context context, List<Station> stations) {
          super(context, android.R.layout.simple_spinner_item, stations);
          setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      }
      
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          TextView view = (TextView) super.getView(position, convertView, parent);
          view.setText(getItem(position).getName());
          return view;
      }
      
      @Override
      public View getDropDownView(int position, View convertView, ViewGroup parent) {
          TextView view = (TextView) super.getDropDownView(position, convertView, parent);
          view.setText(getItem(position).getName());
          return view;
      }
      

      }
      TicketCalculator類
      package com.example.subwayticke;

      import java.util.*;

      public class TicketCalculator {

      public static int calculatePrice(Station start, Station end, List<Line> lines) {
          // 構建地鐵圖
          Graph graph = buildGraph(lines);
      
          // 計算最少站數(不包括起點站)
          int stationCount = Dijkstra.calculateShortestPath(graph, start, end);
      
          if (stationCount == -1) {
              return -1; // 如果沒有找到路徑,返回-1
          }
      
          // 每3站收費1元,不足3站按1元收費
          int price = (int) Math.ceil(stationCount / 3.0);
          return Math.max(price, 1); // 至少收費1元
      }
      
      private static Graph buildGraph(List<Line> lines) {
          Graph graph = new Graph();
      
          // 添加所有站點
          for (Line line : lines) {
              for (Station station : line.getStations()) {
                  graph.addStation(station);
              }
          }
      
          // 添加連接
          for (Line line : lines) {
              List<Station> stations = line.getStations();
              for (int i = 0; i < stations.size() - 1; i++) {
                  graph.addConnection(stations.get(i), stations.get(i + 1));
              }
          }
      
          // 添加換乘連接
          Map<String, List<Station>> stationMap = new HashMap<>();
          for (Line line : lines) {
              for (Station station : line.getStations()) {
                  stationMap.putIfAbsent(station.getName(), new ArrayList<>());
                  stationMap.get(station.getName()).add(station);
              }
          }
      
          for (List<Station> stations : stationMap.values()) {
              if (stations.size() > 1) { // 換乘站
                  for (int i = 0; i < stations.size(); i++) {
                      for (int j = i + 1; j < stations.size(); j++) {
                          graph.addConnection(stations.get(i), stations.get(j));
                      }
                  }
              }
          }
      
          return graph;
      }
      

      }
      activity_main.xml代碼

      <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="起點站"
          android:textSize="18sp"
          android:layout_marginBottom="8dp" />
      
      <Spinner
          android:id="@+id/startStationSpinner"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_marginBottom="16dp" />
      
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="終點站"
          android:textSize="18sp"
          android:layout_marginBottom="8dp" />
      
      <Spinner
          android:id="@+id/endStationSpinner"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_marginBottom="16dp" />
      
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="購票數量"
          android:textSize="18sp"
          android:layout_marginBottom="8dp" />
      
      <EditText
          android:id="@+id/ticketQuantityEditText"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:hint="請輸入購票數量"
          android:inputType="number"
          android:layout_marginBottom="16dp" />
      
      <Button
          android:id="@+id/buyTicketButton"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="立即購票"
          android:textSize="18sp"
          android:layout_marginBottom="16dp" />
      
      <TextView
          android:id="@+id/resultTextView"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:textSize="18sp"
          android:gravity="center"
          android:text="購票結果將顯示在這里" />
      
      posted @ 2025-03-12 22:34  霸王雞  閱讀(15)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 99久久无码私人网站| 亚洲男同志网站| 怡红院一区二区三区在线| 久99久热这里只有精品| 午夜福利一区二区在线看| 日本亚洲一区二区精品| 亚洲欧洲日韩精品在线| 人妻少妇无码精品视频区 | 精品综合一区二区三区四区| 国产精品店无码一区二区三区 | 亚洲尤码不卡av麻豆| 色色97| 2020国产欧洲精品网站| 中国国产免费毛卡片| 东方av四虎在线观看| 最新国产精品好看的精品| 国产成人精品午夜在线观看| 亚洲婷婷综合色高清在线| 中国极品少妇videossexhd| 日韩高清免费一码二码三码| 十八禁国产精品一区二区| av无码小缝喷白浆在线观看| 国产精品天堂蜜av在线播放| 成人性无码专区免费视频| 亚洲国产美女精品久久久| 国产粉嫩区一区二区三区| 鲁丝一区鲁丝二区鲁丝三区| 福安市| 日本一区二区中文字幕久久| 精品久久人人做爽综合| 女人被狂躁到高潮视频免费软件| 在线观看成人av天堂不卡| caoporn成人免费公开| 国产亚洲精品aaaa片app| 98久久人妻少妇激情啪啪| 高清自拍亚洲精品二区| 无码人妻精品一区二区三区下载| 国产在线精品福利91香蕉| 国产精品国产三级国快看| 免费AV片在线观看网址| 国产午夜福利一区二区三区|