Advertisement

QT地铁路线查询项目(四)

阅读量:

1,项目基本介绍

该项目主要功能是实现广州地铁线路信息查询系统。其中地铁站点数据主要基于我们的项目开发框架采用了QT 框架,并且采用C++开发语言进行构建。在界面设计上较为简单化,主要使用了QT的一些基本UI控件,而核心技术和基础则包括地实体查询算法以及换算算法等技术,用户可以根据自己的家乡或城市选择相应数据进行本地化配置并验证实现目标功能

2 代码介绍

2.1头文件

复制代码
 #ifndef MAINWINDOW_H

    
 #define MAINWINDOW_H
    
  
    
 #include <QMainWindow>
    
 #include <QImage>
    
 #include <iostream>
    
 using namespace std;
    
  
    
 #define M 241
    
 //队列结构体
    
 typedef struct
    
 {
    
     int q[10000];
    
     //队头、队尾
    
     int f,r;
    
 }queue;
    
  
    
 //站点信息
    
 struct StationInfo
    
 {
    
     int id;
    
     int line;
    
     int istransfer;
    
     char staname[20];
    
 };
    
  
    
 static struct StationInfo sta[239]={
    
     {1,1,1,"西塱"},
    
     {2,1,0,"坑口"},
    
     {3,1,0,"花地湾"},
    
     {4,1,0,"芳村"},
    
     {5,1,1,"黄沙"},
    
     {6,1,0,"长寿路"},
    
     {7,1,1,"陈家祠"},
    
     {8,1,0,"西门口"},
    
     {9,1,1,"公园前"},
    
     {10,1,0,"农讲所"},
    
     {11,1,0,"烈士陵园"},
    
     {12,1,1,"东山口"},
    
     {13,1,1,"杨箕"},
    
     {14,1,1,"体育西路"},
    
     {15,1,0,"体育中心"},
    
     {16,1,1,"广州东站"},
    
     {17,2,1,"广州南站"},
    
     {18,2,1,"石壁"},
    
     {19,2,0,"会江"},
    
     {20,2,0,"南浦"},
    
     {21,2,0,"洛溪"},
    
     {22,2,1,"南洲"},
    
     {23,2,0,"东晓南"},
    
     {24,2,0,"江泰路"},
    
     {25,2,1,"昌岗"},
    
     {26,2,0,"江南西"},
    
     {27,2,0,"市二宫"},
    
     {28,2,1,"海珠广场"},
    
     {29,2,0,"纪念堂"},
    
     {30,2,0,"越秀公园"},
    
     {31,2,1,"广州火车站"},
    
     {32,2,0,"三元里"},
    
     {33,2,0,"飞翔公园"},
    
     {34,2,0,"白云公园"},
    
     {35,2,0,"白云文化广场"},
    
     {36,2,0,"萧岗"},
    
     {37,2,0,"江夏"},
    
     {38,2,0,"黄边"},
    
     {39,2,1,"嘉禾望岗"},
    
     {40,3,0,"番禺广场"},
    
     {41,3,0,"市桥"},
    
     {42,3,1,"汉溪长隆"},
    
     {43,3,0,"大石"},
    
     {44,3,0,"厦滘"},
    
     {45,3,1,"沥滘"},
    
     {46,3,0,"大塘"},
    
     {47,3,1,"客村"},
    
     {48,3,0,"广州塔"},
    
     {49,3,1,"珠江新城"},
    
     {50,3,0,"石牌桥"},
    
     {51,3,0,"岗顶"},
    
     {52,3,0,"华师"},
    
     {53,3,0,"五山"},
    
     {54,3,1,"天河客运站"},
    
     {55,3,0,"林和西"},
    
     {56,3,1,"燕塘"},
    
     {57,3,0,"梅花园"},
    
     {58,3,0,"京溪南方医院"},
    
     {59,3,0,"同和"},
    
     {60,3,0,"永泰"},
    
     {61,3,0,"白云大道北"},
    
     {62,3,0,"龙归"},
    
     {63,3,0,"人和"},
    
     {64,3,1,"高增"},
    
     {65,3,0,"机场南"},
    
     {66,3,1,"机场北"},
    
     {67,4,0,"南沙客运港"},
    
     {68,4,0,"南横"},
    
     {69,4,0,"塘坑"},
    
     {70,4,0,"大涌"},
    
     {71,4,0,"广隆"},
    
     {72,4,0,"飞沙角"},
    
     {73,4,0,"金洲"},
    
     {74,4,0,"蕉门"},
    
     {75,4,0,"黄阁"},
    
     {76,4,0,"黄阁汽车城"},
    
     {77,4,0,"庆盛"},
    
     {78,4,0,"东涌"},
    
     {79,4,0,"低涌"},
    
     {80,4,0,"海傍"},
    
     {81,4,0,"石碁"},
    
     {82,4,0,"新造"},
    
     {83,4,1,"大学城南"},
    
     {84,4,0,"大学城北"},
    
     {85,4,0,"官洲"},
    
     {86,4,1,"万胜围"},
    
     {87,4,1,"车陂南"},
    
     {88,4,0,"车陂"},
    
     {89,4,1,"黄村"},
    
     {90,5,0,"滘口"},
    
     {91,5,1,"坦尾"},
    
     {92,5,0,"中山八"},
    
     {93,5,0,"西场"},
    
     {94,5,1,"西村"},
    
     {95,5,0,"小北"},
    
     {96,5,0,"淘金"},
    
     {97,5,1,"区庄"},
    
     {98,5,0,"动物园"},
    
     {99,5,0,"五羊邨"},
    
     {100,5,0,"猎德"},
    
     {101,5,0,"潭村"},
    
     {102,5,0,"员村"},
    
     {103,5,0,"科韵路"},
    
     {104,5,0,"东圃"},
    
     {105,5,0,"三溪"},
    
     {106,5,0,"鱼珠"},
    
     {107,5,0,"大沙地"},
    
     {108,5,0,"大沙东"},
    
     {109,5,0,"文冲"},
    
     {110,6,0,"浔峰岗"},
    
     {111,6,0,"横沙"},
    
     {112,6,0,"沙贝"},
    
     {113,6,0,"河沙"},
    
     {114,6,0,"如意坊"},
    
     {115,6,0,"文化公园"},
    
     {116,6,0,"一德路"},
    
     {117,6,0,"北京路"},
    
     {118,6,0,"团一大广场"},
    
     {119,6,0,"东湖"},
    
     {120,6,0,"黄花岗"},
    
     {121,6,0,"沙河顶"},
    
     {122,6,0,"天平架"},
    
     {123,6,0,"长湴"},
    
     {124,6,0,"植物园"},
    
     {125,6,0,"龙洞"},
    
     {126,6,0,"柯木塱"},
    
     {127,6,0,"高塘石"},
    
     {128,6,0,"黄陂"},
    
     {129,6,0,"金峰"},
    
     {130,6,0,"暹岗"},
    
     {131,6,0,"苏元"},
    
     {132,6,0,"萝岗"},
    
     {133,6,0,"香雪"},
    
     {134,7,0,"香谢村"},
    
     {135,7,0,"钟村"},
    
     {136,7,0,"南村万博"},
    
     {137,7,0,"员岗"},
    
     {138,7,0,"板桥"},
    
     {139,8,0,"滘心"},
    
     {140,8,0,"亭岗"},
    
     {141,8,0,"石井"},
    
     {142,8,0,"小坪"},
    
     {143,8,0,"石潭"},
    
     {144,8,0,"聚龙"},
    
     {145,8,0,"上步"},
    
     {146,8,0,"同德"},
    
     {147,8,0,"鹅掌坦"},
    
     {148,8,0,"彩虹桥"},
    
     {149,8,0,"华林寺"},
    
     {150,8,0,"同福西"},
    
     {151,8,0,"凤凰新村"},
    
     {152,8,1,"沙园"},
    
     {153,8,0,"宝岗大道"},
    
     {154,8,0,"晓港"},
    
     {155,8,0,"中大"},
    
     {156,8,0,"鹭江"},
    
     {157,8,0,"赤岗"},
    
     {158,8,0,"磨碟沙"},
    
     {159,8,0,"新港东"},
    
     {160,8,0,"琶洲"},
    
     {161,9,0,"飞鹅岭"},
    
     {162,9,0,"花都汽车城"},
    
     {163,9,0,"广州北站"},
    
     {164,9,0,"花城路"},
    
     {165,9,0,"花果山公园"},
    
     {166,9,0,"花都广场"},
    
     {167,9,0,"马鞍山公园"},
    
     {168,9,0,"莲塘"},
    
     {169,9,0,"清布"},
    
     {170,9,0,"清塘"},
    
     {171,13,0,"裕丰围"},
    
     {172,13,0,"双岗"},
    
     {173,13,0,"南海神庙"},
    
     {174,13,0,"夏园"},
    
     {175,13,0,"南岗"},
    
     {176,13,0,"沙村"},
    
     {177,13,0,"白沙"},
    
     {178,13,0,"新塘"},
    
     {179,13,0,"官湖"},
    
     {180,13,0,"新沙"},
    
     {181,14,0,"白云东平"},
    
     {182,14,0,"夏良"},
    
     {183,14,0,"太和"},
    
     {184,14,0,"竹料"},
    
     {185,14,0,"钟落潭"},
    
     {186,14,0,"马沥"},
    
     {187,14,1,"新和"},
    
     {188,14,0,"太平"},
    
     {189,14,0,"神岗"},
    
     {190,14,0,"赤草"},
    
     {191,14,0,"从化客运站"},
    
     {192,14,0,"东风"},
    
     {193,14,0,"红卫"},
    
     {194,14,0,"新南"},
    
     {195,14,0,"枫下"},
    
     {196,14,0,"知识城"},
    
     {197,14,0,"何棠下"},
    
     {198,14,0,"旺村"},
    
     {199,14,0,"汤村"},
    
     {200,14,0,"镇龙北"},
    
     {201,14,1,"镇龙"},
    
     {202,21,0,"天河公园"},
    
     {203,21,0,"棠东"},
    
     {204,21,0,"大观南路"},
    
     {205,21,0,"天河智慧城"},
    
     {206,21,0,"神舟路"},
    
     {207,21,0,"科学城"},
    
     {208,21,0,"水西"},
    
     {209,21,0,"长平"},
    
     {210,21,0,"金坑"},
    
     {211,21,0,"镇龙西"},
    
     {212,21,0,"中新"},
    
     {213,21,0,"坑贝"},
    
     {214,21,0,"凤岗"},
    
     {215,21,0,"朱村"},
    
     {216,21,0,"山田"},
    
     {217,21,0,"钟岗"},
    
     {218,21,0,"增城广场"},
    
     {219,15,0,"新城东"},
    
     {220,15,0,"东平"},
    
     {221,15,0,"世纪莲"},
    
     {222,15,0,"澜石"},
    
     {223,15,0,"魁奇路"},
    
     {224,15,0,"季华园"},
    
     {225,15,0,"同济路"},
    
     {226,15,0,"祖庙"},
    
     {227,15,0,"普君北路"},
    
     {228,15,0,"朝安"},
    
     {229,15,0,"桂城"},
    
     {230,15,0,"南桂路"},
    
     {231,15,0,"礌岗"},
    
     {232,15,0,"千灯湖"},
    
     {233,15,0,"金融高新区"},
    
     {234,15,0,"龙溪"},
    
     {235,15,0,"菊树"},
    
     {236,15,0,"鹤洞"},
    
     {237,15,0,"沙涌"},
    
     {238,15,0,"燕岗"},
    
     {239,15,0,"石溪"},
    
 };
    
  
    
 namespace Ui {
    
 class MainWindow;
    
 }
    
  
    
 class MainWindow : public QMainWindow
    
 {
    
     Q_OBJECT
    
  
    
 public:
    
     explicit MainWindow(QWidget *parent = nullptr);
    
     ~MainWindow();
    
 protected:
    
     void paintEvent(QPaintEvent *);
    
 public:
    
  
    
     //入队操作
    
     void enq(queue *Q,int x);
    
     //取队头元素
    
     int front(queue *Q);
    
     //出队操作
    
     void dep(queue *Q);
    
     //判断队列是否为空队列
    
     int qempty(queue Q);
    
  
    
     //将地图初始化
    
     void readgraph();
    
 //    //寻找最短路径
    
     void shortest(int a,int b);
    
 //    //打印路径
    
     void writepath(int a,int b);
    
     QString printPayh(int a,int b);
    
  
    
 //  查找
    
     int search(QString str);
    
 private slots:
    
     void on_pushButton_clicked();
    
 private:
    
     Ui::MainWindow *ui;
    
  
    
     //队列声明
    
     queue m_Q;
    
     //站点总数
    
     int m_n;
    
     int m_i,m_j,m_x,m_y;
    
     //判断是否结束的标志
    
     int m_finished;
    
  
    
     //表示连接关系的矩阵
    
     int nodelist[M][M];
    
     int z[M];
    
  
    
     QImage m_Image;//摄像机背景图片
    
 };
    
  
    
 #endif // MAINWINDOW_H
    
    
    
    
    代码解读

2.2 Cpp实现文件

复制代码
 #include "mainwindow.h"

    
 #include "ui_mainwindow.h"
    
 #include <QListView>
    
 #include <QLineEdit>
    
 #include <QCompleter>
    
 #include <QDebug>
    
 #include <QMessageBox>
    
 #include <QPainter>
    
 MainWindow::MainWindow(QWidget *parent) :
    
     QMainWindow(parent),
    
     ui(new Ui::MainWindow)
    
 {
    
     ui->setupUi(this);
    
     setMinimumSize(1280, 860);
    
     setMaximumSize(1280, 860);
    
  
    
     m_Image = QImage(":/bg.png");
    
  
    
     QStringList strList;
    
     for(int i=0; i<239;i++)
    
     {
    
     strList<<QString::fromLocal8Bit(sta[i].staname);
    
     }
    
     QCompleter *pstartCompleter = new QCompleter(strList, this);
    
     ui->lineEdit_strat->setCompleter(pstartCompleter);
    
  
    
     QCompleter *pEndCompleter = new QCompleter(strList, this);
    
     ui->lineEdit_end->setCompleter(pEndCompleter);
    
 }
    
  
    
 MainWindow::~MainWindow()
    
 {
    
     delete ui;
    
 }
    
  
    
 void MainWindow::paintEvent(QPaintEvent *)
    
 {
    
     QPainter painter(this);
    
     painter.setRenderHints(QPainter::Antialiasing);
    
     painter.save();
    
     int offset = 2;
    
     if(!m_Image.isNull())
    
     {
    
     QRect rect(offset / 2, offset / 2, width() - offset, height()-offset);
    
     painter.drawImage(rect, m_Image);
    
     }
    
     painter.restore();
    
 }
    
  
    
 QString MainWindow::printPayh(int a,int b)
    
 {
    
  
    
     QStringList strList;
    
     //将地图初始化
    
     m_i=b;
    
     int index = 0;
    
     while(m_i!=a)
    
     {
    
     QString strtmp,strEnd;
    
     if(sta[m_i-1].istransfer)
    
     {
    
         strtmp = QString(QStringLiteral("(换乘%1号线)%2")).arg(sta[m_i-1].line).arg(QString::fromLocal8Bit(sta[m_i-1].staname));
    
     }
    
     else
    
     {
    
         strtmp = QString(QStringLiteral("%1")).arg(QString::fromLocal8Bit(sta[m_i-1].staname));
    
     }
    
     strEnd = QString(QStringLiteral("%1[终点站]")).arg(QString::fromLocal8Bit(sta[m_i-1].staname));
    
     if(index == 0)
    
     {
    
         strList<<strEnd;
    
     }else
    
     {
    
         strList<<strtmp;
    
     }
    
     m_i=z[m_i];
    
     index++;
    
     }
    
  
    
     if(!sta[a-1].istransfer)
    
     {
    
     printf("|%d号线|",sta[a-1].line);
    
     strList<<QString(QStringLiteral("[起始站](%1号线)%2")).arg(sta[a-1].line).arg(QString::fromLocal8Bit(sta[a-1].staname));
    
     }else {
    
     strList<<QString(QStringLiteral("[起始站]%1")).arg(QString::fromLocal8Bit(sta[a-1].staname));
    
     }
    
  
    
     QString str;
    
     for(int i=strList.size()-1;i>=0;i--)
    
     {
    
     if(i != strList.size()-1)
    
     {
    
        str.append("->");
    
     }
    
     str.append(strList[i]);
    
     }
    
     return str;
    
 }
    
  
    
  
    
 void MainWindow::writepath(int a,int b)
    
 {
    
     //将地图初始化
    
     m_i=b;
    
     while(m_i!=a)
    
     {
    
     if(sta[m_i-1].istransfer)
    
     {
    
         printf("|换乘|");
    
     }
    
     else
    
     {
    
         printf("|%d号线|",sta[m_i-1].line);
    
     }
    
     printf("%s <- ",sta[m_i-1].staname);
    
     m_i=z[m_i];
    
     }
    
     if(!sta[a-1].istransfer)
    
     {
    
     printf("|%d号线|",sta[a-1].line);
    
     }
    
     printf("%s",sta[a-1].staname);
    
     printf("\n");
    
 }
    
  
    
 //寻找最短路径
    
 void MainWindow::shortest(int a,int b)
    
 {
    
     if(a==b)
    
     nodelist[a][a]=2;
    
     else
    
     {
    
     enq(&m_Q,a);
    
     nodelist[a][a]=2;
    
     m_finished=0;
    
     while(!qempty(m_Q)&&!m_finished)
    
     {
    
         //取队头结点
    
         a=front(&m_Q);
    
         //删除一个队头结点
    
         dep(&m_Q);
    
         //从ID为1的结点开始check
    
         m_j=1;
    
         while(m_j<=m_n&&!m_finished)
    
         {
    
             //必须保证结点j和刚出队的结点a直接相连
    
             //且结点j没有被访问过
    
             if(nodelist[a][m_j]==1&&nodelist[m_j][m_j]!=2)
    
             {
    
                 enq(&m_Q,m_j);
    
                 //标志结点j已经被访问过
    
                 nodelist[m_j][m_j]=2;
    
                 //保证能够通过z[j]索引到结点a
    
                 z[m_j]=a;
    
                 //广度优先遍历到达终点
    
                 if(m_j==b)
    
                 {
    
                     m_finished=1;
    
                 }
    
             }
    
             if(!m_finished)
    
                 m_j++;
    
         }
    
     }
    
     if(!m_finished)
    
         printf("没有路径!");
    
     }
    
 }
    
  
    
 void MainWindow::readgraph()
    
 {
    
     int i,j;
    
     //初始化站点总数
    
     m_n=M-2;
    
     //先将矩阵所有元素置零
    
     for(i=0;i<M;i++)
    
     for(j=0;j<M;j++)
    
         nodelist[i][j]=0;
    
     //初始化1号线
    
     for(i=1;i<16;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化2号线
    
     for(i=17;i<39;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化3号线
    
     for(i=40;i<66;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化4号线
    
     for(i=67;i<89;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化5号线
    
     for(i=90;i<109;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化6号线
    
     for(i=110;i<133;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化7号线
    
     for(i=134;i<138;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化8号线
    
     for(i=139;i<160;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化9号线
    
     for(i=161;i<170;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化13号线
    
     for(i=171;i<180;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化14号线
    
     for(i=181;i<201;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化21号线
    
     for(i=202;i<218;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化广佛线
    
     for(i=219;i<239;i++)
    
     {
    
     nodelist[i][i+1]=1;
    
     nodelist[i+1][i]=1;
    
     }
    
     //初始化换乘站点的连接信息
    
     nodelist[1][17]=1;//连接西塱和菊树
    
     nodelist[17][1]=1;//连接菊树和西塱
    
     nodelist[1][19]=1;//连接西塱和鹤洞
    
     nodelist[19][1]=1;//连接鹤洞和西塱
    
     nodelist[5][114]=1;//连接黄沙和如意坊
    
     nodelist[114][5]=1;//连接如意坊和黄沙
    
     nodelist[5][115]=1;//连接黄沙和文化公园
    
     nodelist[115][5]=1;//连接文化公园和黄沙
    
     nodelist[7][148]=1;//连接陈家祠和彩虹桥
    
     nodelist[148][7]=1;//连接彩虹桥和陈家祠
    
     nodelist[7][149]=1;//连接陈家祠和华林寺
    
     nodelist[149][7]=1;//连接华林寺和陈家祠
    
     nodelist[9][29]=1;//连接公园前和纪念堂
    
     nodelist[29][9]=1;//连接纪念堂和公园前
    
     nodelist[9][28]=1;//连接公园前和海珠广场
    
     nodelist[28][9]=1;//连接海珠广场和公园前
    
     nodelist[12][119]=1;//连接东山口和东湖
    
     nodelist[119][12]=1;//连接东湖和东山口
    
     nodelist[12][97]=1;//连接东山口和区庄
    
     nodelist[97][12]=1;//连接区庄和东山口
    
     nodelist[13][98]=1;//连接杨箕和动物园
    
     nodelist[98][13]=1;//连接动物园和杨箕
    
     nodelist[13][99]=1;//连接杨箕和五羊邨
    
     nodelist[99][13]=1;//连接五羊邨和杨箕
    
     nodelist[14][49]=1;//连接体育西路和珠江新城
    
     nodelist[49][14]=1;//连接珠江新城和体育西路
    
     nodelist[14][50]=1;//连接体育西路和石牌桥
    
     nodelist[50][14]=1;//连接石牌桥和体育西路
    
     nodelist[14][55]=1;//连接体育西路和林和西
    
     nodelist[55][14]=1;//连接林和西和体育西路
    
     nodelist[16][55]=1;//连接广州东站和林和西
    
     nodelist[55][16]=1;//连接林和西和广州东站
    
     nodelist[16][56]=1;//连接广州东站和燕塘
    
     nodelist[56][16]=1;//连接燕塘和广州东站
    
     nodelist[18][134]=1;//连接石壁和谢村
    
     nodelist[134][18]=1;//连接谢村和石壁
    
     nodelist[22][45]=1;//连接南洲和沥滘
    
     nodelist[45][22]=1;//连接沥滘和南洲
    
     nodelist[22][239]=1;//连接南洲和石溪
    
     nodelist[239][22]=1;//连接石溪和南洲
    
     nodelist[25][154]=1;//连接昌岗和晓港
    
     nodelist[154][25]=1;//连接晓港和昌岗
    
     nodelist[25][153]=1;//连接昌岗和宝岗大道
    
     nodelist[153][25]=1;//连接宝岗大道和昌岗
    
     nodelist[28][116]=1;//连接海珠广场和一德路
    
     nodelist[116][28]=1;//连接一德路和海珠广场
    
     nodelist[28][117]=1;//连接海珠广场和北京路
    
     nodelist[117][28]=1;//连接北京路和海珠广场
    
     nodelist[31][95]=1;//连接广州火车站和小北
    
     nodelist[95][31]=1;//连接小北和广州火车站
    
     nodelist[31][94]=1;//连接广州火车站和西村
    
     nodelist[94][31]=1;//连接西村和广州火车站
    
     nodelist[39][61]=1;//连接嘉禾望岗和白云大道北
    
     nodelist[61][39]=1;//连接白云大道北和嘉禾望岗
    
     nodelist[39][62]=1;//连接嘉禾望岗和龙归
    
     nodelist[62][39]=1;//连接龙归和嘉禾望岗
    
     nodelist[39][181]=1;//连接嘉禾望岗和白云东平
    
     nodelist[181][39]=1;//连接白云东平和嘉禾望岗
    
     nodelist[64][170]=1;//连接高增和清塘
    
     nodelist[170][64]=1;//连接清塘和高增
    
     nodelist[83][138]=1;//连接大学城南和板桥
    
     nodelist[138][83]=1;//连接板桥和大学城南
    
     nodelist[86][160]=1;//连接万胜围和琶洲
    
     nodelist[160][86]=1;//连接琶洲和万胜围
    
     nodelist[87][103]=1;//连接车陂南和科韵路
    
     nodelist[103][87]=1;//连接科韵路和车陂南
    
     nodelist[87][104]=1;//连接车陂南和东圃
    
     nodelist[104][87]=1;//连接东圃和车陂南
    
     nodelist[89][204]=1;//连接黄村和大观南路
    
     nodelist[204][89]=1;//连接大观南路和黄村
    
     nodelist[89][203]=1;//连接黄村和棠东
    
     nodelist[203][89]=1;//连接棠东和黄村
    
     nodelist[91][113]=1;//连接坦尾和河沙
    
     nodelist[113][91]=1;//连接河沙和坦尾
    
     nodelist[91][114]=1;//连接坦尾和如意坊
    
     nodelist[114][91]=1;//连接如意坊和坦尾
    
     nodelist[94][148]=1;//连接西村和彩虹桥
    
     nodelist[148][94]=1;//连接彩虹桥和西村
    
     nodelist[94][147]=1;//连接西村和鹅掌坦
    
     nodelist[147][94]=1;//连接鹅掌坦和西村
    
     nodelist[97][120]=1;//连接区庄和黄花岗
    
     nodelist[120][97]=1;//连接黄花岗和区庄
    
     nodelist[56][122]=1;//连接燕塘和天平架
    
     nodelist[122][56]=1;//连接天平架和燕塘
    
     nodelist[56][54]=1;//连接燕塘和天河客运站
    
     nodelist[54][56]=1;//连接天河客运站和燕塘
    
     nodelist[131][207]=1;//连接苏元和科学城
    
     nodelist[207][131]=1;//连接科学城和苏元
    
     nodelist[131][208]=1;//连接苏元和水西
    
     nodelist[208][131]=1;//连接水西和苏元
    
     nodelist[102][202]=1;//连接员村和天河公园
    
     nodelist[202][102]=1;//连接天河公园和员村
    
     nodelist[106][171]=1;//连接鱼珠和裕丰围
    
     nodelist[171][106]=1;//连接裕丰围和鱼珠
    
     nodelist[115][149]=1;//连接文化公园和华林寺
    
     nodelist[149][115]=1;//连接华林寺和文化公园
    
     nodelist[115][150]=1;//连接文化公园和同福西
    
     nodelist[150][115]=1;//连接同福西和文化公园
    
     nodelist[42][135]=1;//连接汉溪长隆和钟村
    
     nodelist[135][42]=1;//连接钟村和汉溪长隆
    
     nodelist[42][136]=1;//连接汉溪长隆和南村万博
    
     nodelist[136][42]=1;//连接南村万博和汉溪长隆
    
     nodelist[54][123]=1;//连接天河客运站和长湴
    
     nodelist[123][54]=1;//连接长湴和天河客运站
    
     nodelist[49][99]=1;//连接珠江新城和五羊邨
    
     nodelist[99][49]=1;//连接五羊邨和珠江新城
    
     nodelist[49][100]=1;//连接珠江新城和猎德
    
     nodelist[100][49]=1;//连接猎德和珠江新城
    
     nodelist[47][156]=1;//连接客村和鹭江
    
     nodelist[156][47]=1;//连接鹭江和客村
    
     nodelist[47][157]=1;//连接客村和赤岗
    
     nodelist[157][47]=1;//连接赤岗和客村
    
     nodelist[152][237]=1;//连接沙园和沙涌
    
     nodelist[237][152]=1;//连接沙涌和沙园
    
     nodelist[152][238]=1;//连接沙园和燕岗
    
     nodelist[238][152]=1;//连接燕岗和沙园
    
     nodelist[187][193]=1;//连接新和和红卫
    
     nodelist[193][187]=1;//连接红卫和新和
    
     nodelist[201][211]=1;//连接镇龙和镇龙西
    
     nodelist[211][201]=1;//连接镇龙西和镇龙
    
     nodelist[201][212]=1;//连接镇龙和中新
    
     nodelist[212][201]=1;//连接中西和镇龙
    
 }
    
  
    
 //入队操作
    
 void MainWindow::enq(queue *Q,int x)
    
 {
    
     Q->q[Q->r]=x;
    
     if(Q->r==9999)
    
     Q->r=0;
    
     else
    
     Q->r++;
    
     if(Q->r==Q->f)
    
     printf("队溢出!\n");
    
 }
    
  
    
 //取队头元素
    
 int MainWindow::front(queue *Q)
    
 {
    
     if(Q->r==Q->f)
    
     {
    
     printf("front函数:队空!\n");
    
     return 0;
    
     }
    
     else
    
     return Q->q[Q->f];
    
 }
    
  
    
 //出队操作
    
 void MainWindow::dep(queue *Q)
    
 {
    
     if(Q->r==Q->f)
    
     printf("dep函数:队空!\n");
    
     else
    
     {
    
     if(Q->f==9999)
    
         Q->f=0;
    
     else
    
         Q->f++;
    
     }
    
 }
    
  
    
 //判断队列是否为空队列
    
 int MainWindow::qempty(queue Q)
    
 {
    
     if(Q.f==Q.r)
    
     return 1;
    
     else
    
     return 0;
    
 }
    
  
    
 int MainWindow::search(QString str)
    
 {
    
     for(int i= 0; i<239; i++)
    
     {
    
     if(QString::fromLocal8Bit(sta[i].staname) == str)
    
     {
    
         return sta[i].id;
    
     }
    
     }
    
     return -1; //失败
    
 }
    
  
    
 void MainWindow::on_pushButton_clicked()
    
 {
    
     QString strStart = ui->lineEdit_strat->text();
    
     QString strEnd = ui->lineEdit_end->text();
    
     if(strStart.isEmpty() || strEnd.isEmpty())
    
     {
    
     QMessageBox::critical(this, QStringLiteral("错误"), QStringLiteral("请输入正确的起始站和终点站"), QMessageBox::Close);
    
     return;
    
     }
    
  
    
     int istart = search(strStart);
    
     if(istart == -1)
    
     {
    
     QMessageBox::critical(this, QStringLiteral("错误"), QStringLiteral("没有找到你需要的起始站"), QMessageBox::Close);
    
     return;
    
     }
    
     int isEnd = search(strEnd);
    
  
    
     if(isEnd == -1)
    
     {
    
     QMessageBox::critical(this, QStringLiteral("错误"), QStringLiteral("没有找到你要的终点站"), QMessageBox::Close);
    
     return;
    
     }
    
     qDebug()<<istart<<"-------ssss-----"<<isEnd<<endl;
    
     m_Q.f = 0;
    
     m_Q.r = 0;
    
     memset(m_Q.q,0x00,10000);
    
  
    
     m_n = 0;
    
     m_i = m_j =m_x = m_y=0;
    
     //判断是否结束的标志
    
     m_finished = 0;
    
  
    
     readgraph();
    
     shortest(istart, isEnd);
    
     ui->label_showLin->setText(printPayh(istart, isEnd));
    
 }
    
    
    
    
    代码解读

全部评论 (0)

还没有任何评论哟~