神秘国度的爱情故事(C++数据结构课设)

编程入门 行业动态 更新时间:2024-10-07 03:26:43

神秘国度的爱情故事(C++<a href=https://www.elefans.com/category/jswz/34/1769880.html style=数据结构课设)"/>

神秘国度的爱情故事(C++数据结构课设)

目录

 1、题目

 2、代码

 3、运行图

 4、说明书


1、题目

 2、代码

#include<iostream>
using namespace std;
#define MAXNODE 10000        //小村最大个数
int visited[MAXNODE];      //标志数组typedef struct Edge        //边结点
{int index;             //顶点在顶点数组中的位置struct Edge* nextedge; //指向下一个边结点
}EdgeNode;typedef struct VNode       //顶点信息
{int data;              //顶点数据EdgeNode* firstedge;   //指向第一条边的指针 
}Link;typedef struct             //定义邻接表
{int vertexnum, edgenum;//总顶点数和总边数Link vertics[MAXNODE]; //顶点数组
}Graph;void CreateGraph(Graph& g)
{//采用邻接表表示法建立无向村落图cout << "小主,请输入神秘国度中的小村个数N:";while (true){cin >> g.vertexnum;while(!cin.good()){cin.clear();cin.sync();system("COLOR 01");cout << "小主莫急,请重新输入:";cin >> g.vertexnum; }if (1 <= g.vertexnum && g.vertexnum <= MAXNODE)  break;system("COLOR 01");cout << "小主莫急,请重新输入:";}system("COLOR F4");g.edgenum = g.vertexnum - 1;//道路数是村子数-1int i;for (i = 0; i < g.vertexnum; i++){g.vertics[i].data=i;    //每个小村从0开始编号g.vertics[i].firstedge = NULL;}cout << "------------------------------------------\n" ;for (i = 0; i < g.edgenum; i++){int m, n;cout << "请输入第" << i + 1 << "条道路的两个端点小村的编号:";while (true){cin >> m >> n;while (!cin.good()){cin.clear();cin.sync();system("COLOR 01");cout << "小主莫急,请重新输入:";cin >> m >> n;}if (m >= 0 && m < g.vertexnum && n >= 0 && n < g.vertexnum)  break;system("COLOR 01");cout << "小主莫急,请重新输入:";}system("COLOR F4");if(i<g.edgenum-1)cout << "---------------------------\n" ;EdgeNode* p1 = new Edge;              //头插法,先建立一个Edge类型的结点p1p1->index = n;                        //将n村的编号赋值给p1的数据域p1->nextedge = g.vertics[m].firstedge;//将p1的指针域赋为空值g.vertics[m].firstedge = p1;          //将第m个表头结点的指针域指向p1EdgeNode* p2 = new Edge;              //建立无向图p2->index = m;p2->nextedge = g.vertics[n].firstedge;g.vertics[n].firstedge = p2;}
}void BfsTree2(Graph g, int C , int B)
{//广度优先遍历邻接表,并查询B是否在C到所有未访问结点的路径上int k, Q[MAXNODE], front = 0, rear = 0;//使用队列int i = 0;EdgeNode* p;                      //指向边结点的指针visited[C] = 1;                   //C村开始所有访问过的村子标志为1rear = (rear + 1) % MAXNODE;      //计算队尾所在位置Q[rear] = C;                      //从C村开始while (front != rear)             //判断队空{front = (front + 1) % MAXNODE;//计算队头所在位置k = Q[front];p = g.vertics[k].firstedge;while (p != NULL && i != 1)   //是否为最后一个边结点{if (!visited[p->index])   //结点是否被访问过{visited[p->index] = 1;//标记已访问if (p->index == B)    //如果遍历到B{cout << "       YES 千里姻缘一路牵,一生甜蜜两村间" << endl;i = 1;rear = front;}if (i == 0){rear = (rear + 1) % MAXNODE;Q[rear] = p->index;}}//访问结束 p = p->nextedge;}    //判断指针为空结束}        //判断队列为空结束if (i != 1)cout << "       NO  此情可待成追忆,只是当时已惘然" << endl; 
}void BfsTree1(Graph g, int A, int B, int C)
{//广度优先遍历邻接表,并查询C是否在A和B之间的路径上int k, Q[MAXNODE], front = 0, rear = 0;//使用队列int i = 0;EdgeNode* p;                      //指向边结点的指针visited[A] = 1;                   //A村开始所有访问过的村子标志为1rear = (rear + 1) % MAXNODE;      //计算队尾所在位置Q[rear] = A;                      //从A村开始while (front != rear)             //判断队空 {front = (front + 1) % MAXNODE;//计算队头所在位置k = Q[front];p = g.vertics[k].firstedge;while (p != NULL && i != 1)   //是否为最后一个边结点{if (!visited[p->index])   //结点是否被访问过{visited[p->index] = 1;//标记已访问if (p->index == B)    //如果遍历到B{cout << "       NO  此情可待成追忆,只是当时已惘然" << endl;i = 1;front = rear;}else{if (p->index == C)//如果遍历到C{BfsTree2(g, C, B);i = 1;front = rear;}}if (i == 0){rear = (rear + 1) % MAXNODE;Q[rear] = p->index;}}//访问结束p = p->nextedge;}    //判断指针为空结束}        //判断队列为空结束
}void test(Graph g)
{//测试int M, i, j;int test1[MAXNODE], test2[MAXNODE], test3[MAXNODE];//用于存放测试组数据cout << "------------------------------------------\n";cout << "请输入测试组个数M:";while (true){cin >> M;while (!cin.good()){cin.clear();cin.sync();system("COLOR 01");cout << "小主莫急,请重新输入:";cin >> M;}if (1 <= M && M <= MAXNODE)  break;system("COLOR 01");cout << "小主莫急,请重新输入:";}system("COLOR F4");cout << "------------------------------------------\n";for (i = 0; i < M; i++){cout << "请输入第"<<i+1<<"组要测试的A B C三村的编号:";while (true){cin >> test1[i] >> test2[i] >> test3[i];while (!cin.good()){cin.clear();cin.sync();system("COLOR 01");cout << "小主莫急,请重新输入:";cin >> test1[i] >> test2[i] >> test3[i];}if ((test1[i] >= 0 && test1[i] < g.vertexnum) &&(test2[i] >= 0 && test2[i] < g.vertexnum) &&(test3[i] >= 0 && test3[i] < g.vertexnum))break;system("COLOR 01");cout << "小主莫急,请重新输入:";}system("COLOR F4");if(i<M-1)cout << "---------------------------\n";}cout << "------------------------------------------\n";cout << "测试后的结果为:\n" ;for (i = 0; i < M; i++){if (test1[i] == test3[i] || test2[i] == test3[i])cout << "       YES 千里姻缘一路牵,一生甜蜜两村间" << endl;else{for (j = 0; j < g.vertexnum; j++)visited[j] = 0;//所有未访问村子标志为0BfsTree1(g, test1[i], test2[i], test3[i]);}}
}int main()
{system("COLOR F4");cout << "                ******   ******                " << endl;cout << "             ********** **********             " << endl;cout << "           *************************           " << endl;cout << "           ***神秘国度的爱情故事****           " << endl;cout << "           *************************           " << endl;cout << "            ***********************            " << endl;cout << "               *****************               " << endl;cout << "                 *************                 " << endl;cout << "                    *******                    " << endl;cout << "                       *                       " << "\n\n\n";Graph g;CreateGraph(g);test(g);cout << "\n\n";system("pause");return 0;
}

3、运行图

 4、说明书

        哈哈,说明书需要加我QQ:2059718410领取哦,因为我暂时不能上传资源。

更多推荐

神秘国度的爱情故事(C++数据结构课设)

本文发布于:2024-02-07 10:43:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756485.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据结构   国度   爱情故事   神秘

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!