本项目是用c语言实现对公交车线路信息的简单模拟,以完成建立公交路线信息、查询公交路线信息等功能。
〔基本要求〕本项目的实质是在某些站点之间建立公交线路实现连通。完成对公交线路信息的建立、站点之间线路的查询等功能,因为公交路线是有一定的连续关系的,如果想输出从某一个起始点开始到某一终点结束的公交路线,就需要找到从某一顶点开始的第一个邻接点和下一个邻接点。因为在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,所以本课题可使用图的邻接表存储结构。将每个功能写成一个函数来完成对数据的操作,并得出运行结果。
有没有朋友帮忙解决一下,昨天晚上鏖战一晚上都没结果
https://blog.csdn.net/i_stupid/article/details/80898468
#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;
}
该系统需要实现公交线路信息的建立和查询功能。需要查询某个站点之间的公交路线信息。需要建立公交线路间的连通关系。其中公交路线信息的建立包括线路编号、始发站、终点站、途经站点以及到达时间等。连通关系可以用图的邻接矩阵或邻接表表示。
推荐使用图的邻接表来存储公交线路信息,因为邻接表可以更方便地表示节点之间的关系,并且比邻接矩阵更省空间。
实现从某一起始点到某一终点的公交路线查询功能可以使用广度优先搜索算法(BFS)。首先需要找到起始点在邻接表中的位置,然后从该位置开始执行BFS算法,根据邻接表中节点的信息和连通关系来逐步向外扩展,直到找到终点为止。同时可以在搜索的过程中记录下到达每个节点的路径信息,以便查找完整的公交路线。找到某个站点的第一个邻接点可以在邻接表中该节点的链表中查找,下一个邻接点可以在该链表的下一个节点中查找。
该项目需要实现创建邻接表、插入节点、插入边、删除节点、删除边等操作的函数。例如,创建邻接表的函数可以是:
#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;
}
}
其中插入节点、插入边、删除节点、删除边等操作的具体实现可以根据实际需要来进行编写。运行结果可以根据具体需求进行设计和实现。