数据结构编程回顾(五)交通咨询系统设计

题目五:交通咨询系统设计
设计要求:设计一个咨询交通系统,能让旅客咨询从任一个
城市到另一个城市之间的最短路径(里程)、最低费用或者
最少时间等问题。对于不同的咨询要求,可以输入城市间路
程、所需时间或者所需费用。
设计分3 个部分:
1、 建立交通网络图的存储结构;
2、 解决单源最短路径问题;
3、 实现两个城市之间的最短路径问题。

数据结构编程回顾(五)交通咨询系统设计_第1张图片

使用二维数组traffic[i][j]来存储两个城市i j之间的最短距离,

由于作者比较懒,所以直接用了粗暴的floyd的方法(五行代码那个):

根据图中的数据建立图:

先建立下三角,用999999表示不可直达,然后对称到上三角,对角线置0.

void create(int traffic[7][7]){
    int i,j;
    for(i=0;i<7;i++){
        for(j=0;j<7;j++){
            traffic[i][j]=999999;
        }
    }
    traffic[0][1]=2553;
    traffic[0][2]=700;
    traffic[0][3]=704;
    traffic[1][2]=511;
    traffic[1][4]=812;
    traffic[2][3]=349;
    traffic[2][5]=1579;
    traffic[3][6]=651;
    traffic[4][5]=2368;
    traffic[5][6]=1385;
      for(i=0;i<7;i++){
        for(j=0;j<7;j++){
            if(i==j){
                traffic[i][i]=0;
            }
            if(traffic[i][j]<999999){}
            traffic[j][i]=traffic[i][j];
        }
    }


}

floyd算法:

void floyd(int e[7][7]){
    int i,j,k;
 for(k=0;k<7;k++)
    for(i=0;i<7;i++)
        for(j=0;j<7;j++)
          if(e[i][j]>e[i][k]+e[k][j] )
                e[i][j]=e[i][k]+e[k][j];
}

然后就是完整代码了。

这么快。。。单源最短路可以使用Dijkstra,更快一些,但是有点长,ccf当时有道题类似求但愿最短路当时我觉得Dijkstra写起来太麻烦了我就直接五行代码,然后最后这道题得了三十分,如果Dijkstra应该过的样例多一些,毕竟两个的时间复杂度不在一个级别的。

 

#include 
#include 
using namespace std;

void create(int traffic[7][7]){
    int i,j;
    for(i=0;i<7;i++){
        for(j=0;j<7;j++){
            traffic[i][j]=999999;
        }
    }
    traffic[0][1]=2553;
    traffic[0][2]=700;
    traffic[0][3]=704;
    traffic[1][2]=511;
    traffic[1][4]=812;
    traffic[2][3]=349;
    traffic[2][5]=1579;
    traffic[3][6]=651;
    traffic[4][5]=2368;
    traffic[5][6]=1385;
      for(i=0;i<7;i++){
        for(j=0;j<7;j++){
            if(i==j){
                traffic[i][i]=0;
            }
            if(traffic[i][j]<999999){}
            traffic[j][i]=traffic[i][j];
        }
    }


}
void floyd(int e[7][7]){
    int i,j,k;
 for(k=0;k<7;k++)
    for(i=0;i<7;i++)
        for(j=0;j<7;j++)
          if(e[i][j]>e[i][k]+e[k][j] )
                e[i][j]=e[i][k]+e[k][j];
}
void print(int p[7][7]){
int i,j;
  for(i=0;i<7;i++){
        for(j=0;j<7;j++){
            cout<>a>>b;
    if(a>=0&&b>=0&&a<7&&b<7)
    cout<>a;
    if(a>=0&&a<7){
            int i;
        for(i=0;i<7;i++){
            cout<

 

你可能感兴趣的:(数据结构)