c语言实现对公交车线路的简单模拟

本项目是用c语言实现对公交车线路信息的简单模拟,以完成建立公交路线信息、查询公交路线信息等功能。
〔基本要求〕本项目的实质是在某些站点之间建立公交线路实现连通。完成对公交线路信息的建立、站点之间线路的查询等功能,因为公交路线是有一定的连续关系的,如果想输出从某一个起始点开始到某一终点结束的公交路线,就需要找到从某一顶点开始的第一个邻接点和下一个邻接点。因为在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,所以本课题可使用图的邻接表存储结构。将每个功能写成一个函数来完成对数据的操作,并得出运行结果。
有没有朋友帮忙解决一下,昨天晚上鏖战一晚上都没结果

https://blog.csdn.net/i_stupid/article/details/80898468

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7544266
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言之结构体 现有36名教师,每个教师包括教工号,姓名,工资共三项基本信息,请用C语言编程,从键盘上输入每一位教师的基本信息,并打印输出工资最高者的工号,姓名工资和所有教师的平均工资
  • 除此之外, 这篇博客: 初学C语言【14】寻找单身狗中的 方法二 :异或(两数,相同为 0 ,相异为 1 ),整个数组全部元素进行异或,出现两次的元素异或为“0”,最后的结果不可能是零(否则没有单身狗了,不可能,我就是单身狗),寻找数组元素异或后二进制为 1 的位置(区别),然后将该数组分为两组,一组该二进制位全为 1 ,将数组中该位为1的所有数异或,因为数组中相同的数异或为0,仅留下该位为1的单身狗数;另外一组该位全为0,同理,该位为0的所有数异或,最后仅留下该位为0的单身狗数。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    void finddog(int a[], int sz, int* num)
    {
        int i = 0;
        int pos = 0;
        int ret = 0;
        //遍历数组,结果为两个不同数的异或。
        for (i = 0; i < sz; i++)
        {
            ret ^= a[i];
        }
        //寻找这两个不同数异或结果的一个位为 1 的位
        for (pos = 0; pos < 32; pos++)
        {
            if (((ret >> pos) & 1) == 1)//整型 32 位,从低位向高位依次遍历
            {
                break;     //pos记录二进制位为 1 的数
            }
        }
        for (i = 0; i < sz; i++)
        {
            //找到数组中pos位为1的数,并进行异或
            if (((a[i] >> pos) & 1) == 1)
            {
               num[1] ^= a[i];
            }
            //找到数组中pos位为0的数,并进行异或
            else
            {
                num[0] ^= a[i];
            }
        }
    }
    int main()
    {
        int arr[] = { 1, 2, 3, 4, 5, 2, 1, 3 };
        int num[2] = { 0 };
        int sz = sizeof(arr) / sizeof(arr[0]);
        finddog(arr, sz, num);
        printf("%d %d\n", num[0], num[1]);
        return 0;
    }
    
  • 以下回答由chatgpt基于相关博客总结生成:
    1. 该系统需要实现公交线路信息的建立和查询功能。需要查询某个站点之间的公交路线信息。需要建立公交线路间的连通关系。其中公交路线信息的建立包括线路编号、始发站、终点站、途经站点以及到达时间等。连通关系可以用图的邻接矩阵或邻接表表示。

    2. 推荐使用图的邻接表来存储公交线路信息,因为邻接表可以更方便地表示节点之间的关系,并且比邻接矩阵更省空间。

    3. 实现从某一起始点到某一终点的公交路线查询功能可以使用广度优先搜索算法(BFS)。首先需要找到起始点在邻接表中的位置,然后从该位置开始执行BFS算法,根据邻接表中节点的信息和连通关系来逐步向外扩展,直到找到终点为止。同时可以在搜索的过程中记录下到达每个节点的路径信息,以便查找完整的公交路线。找到某个站点的第一个邻接点可以在邻接表中该节点的链表中查找,下一个邻接点可以在该链表的下一个节点中查找。

    4. 该项目需要实现创建邻接表、插入节点、插入边、删除节点、删除边等操作的函数。例如,创建邻接表的函数可以是:

    #define MAX_VERTEX_NUM 100
    #define INFINITY 65535
    typedef int VertexType;
    typedef int EdgeType;
    
    // 邻接表中表示图节点的数据结构
    typedef struct ArcNode {
        int adjvex;            // 表示该边指向的节点在数组中的位置
        EdgeType weight;       // 表示边的权值,可以为空
        struct ArcNode *next;  // 该边的下一条边
    } ArcNode;
    
    // 邻接表中表示顶点的数据结构
    typedef struct VNode {
        VertexType data;  // 节点的名称或其他信息
        ArcNode *first;   // 指向第一条依附该节点的边的指针
    } VNode, AdjList[MAX_VERTEX_NUM];
    
    // 邻接表表示图的数据结构
    typedef struct {
        AdjList vertices;  // 邻接表,表示图中所有节点
        int vexnum;        // 表示图中节点的个数
        int arcnum;        // 表示图中边的个数
    } ALGraph;
    
    // 创建邻接表
    void CreateALGraph(ALGraph *G) {
        scanf("%d, %d", &(G->vexnum), &(G->arcnum));
        for (int i = 0; i < G->vexnum; i++) {
            scanf("%d", &(G->vertices[i].data));
            G->vertices[i].first = NULL;
        }
        for (int i = 0; i < G->arcnum; i++) {
            int v1, v2, w;
            scanf("%d, %d, %d", &v1, &v2, &w);
            ArcNode *p = (ArcNode *)malloc(sizeof(ArcNode));
            p->adjvex = v2;
            p->weight = w;
            p->next = G->vertices[v1].first;
            G->vertices[v1].first = p;
        }
    }
    

    其中插入节点、插入边、删除节点、删除边等操作的具体实现可以根据实际需要来进行编写。运行结果可以根据具体需求进行设计和实现。